Tableaux associatifs

Initialiser un tableau

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)
$

Tester l'existence d'un élément

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 ) {
     ...
     ...
}

Supprimer un élément

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.

Etiquettes: