Dans le langage awk, il existe 2 types de tableaux
L'indice de départ est au choix.
Exemple
Traitement du fichier /etc/passwd.
Ligne 2, initialisation de la variable FS.
Ligne 5, le contenu de la variable $1 correspondant au user est stocké dans le tableau user[] indicé à partir de 1.
Ligne 8 à 10, on parcourt le tableau et on affiche le contenu en formatant l'affichage avec printf.
$ nl script5.awk
1 BEGIN {
2 FS=":"
3 }
4 {
5 user[NR]=$1
6 }
7 END {
8 for (indice = 1 ; indice <= NR ; indice++ ) {
9 printf ("User num %2d : %-20s\n" , indice , user[indice]) ;
10 }
11 }
Exécution
$ awk -f script5.awk /etc/passwd
User num 1 : root
User num 2 : daemon
User num 3 : bin
User num 4 : sys
User num 5 : sync
User num 6 : games
User num 7 : man
User num 8 : lp
User num 9 : mail
User num 10 : news
User num 11 : uucp
User num 12 : proxy
User num 13 : www-data
User num 14 : backup
User num 15 : list
User num 16 : irc
User num 17 : gnats
User num 18 : nobody
User num 19 : libuuid
User num 20 : postfix
User num 21 : sshd
User num 22 : mysql
$
Les tableaux associatifs ont leurs éléments indicés par une chaine de caractères. Cet indice alphanumérique est considéré comme la clé et l'élément correspondant est nommé valeur.
Exemple
Le fichier depts2012.txt liste tous les départements par numéro de région.
$ cat depts2012.txt
REGION DEP CHEFLIEU TNCC NCC NCCENR
82 01 01053 5 AIN Ain
22 02 02408 5 AISNE Aisne
83 03 03190 5 ALLIER Allier
93 04 04070 4 ALPES-DE-HAUTE-PROVENCE Alpes-de-Haute-Provence
93 05 05061 4 HAUTES-ALPES Hautes-Alpes
93 06 06088 4 ALPES-MARITIMES Alpes-Maritimes
82 07 07186 5 ARDECHE Ardèche
21 08 08105 4 ARDENNES Ardennes
...
11 95 95500 2 VAL-D'OISE Val-d'Oise
01 971 97105 3 GUADELOUPE Guadeloupe
02 972 97209 3 MARTINIQUE Martinique
03 973 97302 3 GUYANE Guyane
04 974 97411 0 LA REUNION La Réunion
06 976 97608 0 MAYOTTE Mayotte
$
Le script suivant doit compter le nombre de départements qu'il y a par numéro de région.
La section BEGIN est vide car il n'y a pas besoin d'initialiser des variables.
Ligne 3, une condition est renseignée afin de ne pas traiter la première ligne du fichier qui correspond aux en-têtes.
Ligne 4, mise à jour du tableau nbdepts[] ayant comme clé la valeur du premier champ correspondant au numéro de la région et incrémenté de 1 à chaque fois que le champ 1 de la ligne traitée correspond à la clé.
Ligne 7 à 9, on parcourt le tableau et on affiche les résultats.
$ nl script6.awk
1 BEGIN {
2 }
3 NR != 1{
4 nbdepts[$1]+=1
5 }
6 END {
7 for ( region in nbdepts) {
8 printf("Region num : %02d ==> %3d departement(s)\n" , region , nbdepts[region])
9 }
10 }
$
Exécution
$ awk -f script6.awk depts2012.txt
Region num : 01 ==> 1 departement(s)
Region num : 02 ==> 1 departement(s)
Region num : 03 ==> 1 departement(s)
Region num : 04 ==> 1 departement(s)
Region num : 11 ==> 8 departement(s)
Region num : 06 ==> 1 departement(s)
Region num : 21 ==> 4 departement(s)
Region num : 22 ==> 3 departement(s)
Region num : 23 ==> 2 departement(s)
Region num : 31 ==> 2 departement(s)
Region num : 24 ==> 6 departement(s)
Region num : 25 ==> 3 departement(s)
Region num : 26 ==> 4 departement(s)
Region num : 41 ==> 4 departement(s)
Region num : 42 ==> 2 departement(s)
Region num : 43 ==> 4 departement(s)
Region num : 52 ==> 5 departement(s)
Region num : 53 ==> 4 departement(s)
Region num : 54 ==> 4 departement(s)
Region num : 72 ==> 5 departement(s)
Region num : 73 ==> 8 departement(s)
Region num : 74 ==> 3 departement(s)
Region num : 82 ==> 8 departement(s)
Region num : 83 ==> 4 departement(s)
Region num : 91 ==> 5 departement(s)
Region num : 93 ==> 6 departement(s)
Region num : 94 ==> 2 departement(s)
$
Le mot clé in permet de tester l'existence d'une clé dans un tableau associatif. Cette expression retourne vrai si la clé est présente, faux dans le cas contraire.
cle in tableau
Cette expression peut donc être utilisée comme condition d'une structure de contrôle.
if ( cle in tableau ) {
...
...
}
Il est possible de supprimer un élément d'un tableau associatif en utilisant la syntaxe suivante.
delete tableau[cle]
La paire clé-valeur est supprimée.