Les arguments de la ligne de commande

awk fourni un mécanisme qui permet de passer des arguments à un script au moment de son appel. Les variables ARGC et ARGV sont initialisées par awk et permettent de traiter les valeurs passées sur la ligne de commandes. La syntaxe doit être obligatroirement du genre var=value et placé avant le ou les fichiers à traiter.

Exemple

Avec le fichier depts2012.txt. Ecrire un script awk permettant de rechercher dans le fichier des enregistrements bien précis en lui passant comme argument un code région (champ 1), un code département (champ 2), un code postal (champ3) ou un département (champ5).

$ 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      92      92050   4       HAUTS-DE-SEINE  Hauts-de-Seine
11      93      93008   3       SEINE-SAINT-DENIS       Seine-Saint-Denis
11      94      94028   2       VAL-DE-MARNE    Val-de-Marne
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 traitera au maximum 4 arguments. La variable $1 devra être strictement égale à la valeur de l'argument coderegion, la variable $2 devra être strictement égale à la valeur de l'argument codedept, la variable $3 devra être strictement égale à la valeur de l'argument codepostal et enfin la variable $5 devra être strictement égale à la valeur de l'argument dept. Tous ces arguments sont bien sûr facultatifs. Les instructions next permettent de ne pas afficher plusieurs fois une même ligne correspondante à plusieurs sections intermédiaires.

$ nl script9.awk
     1  BEGIN {
     2          print "ARGC = " , ARGC
     3          for (i=0 ; i<ARGC ; i++) {
     4                  printf ("ARGV[%d] = %s\n", i , ARGV[i])
     5          }
     6  }
     7  $1 == coderegion {
     8          print $0
     9          next
    10  }
    11  $2 == codedept {
    12          print $0
    13          next
    14  }
    15  $3 == codepostal {
    16          print $0
    17          next
    18  }
    19  $5 == dept {
    20          print $0
    21          next
    22  }
$

Exécution du script ayant comme argument de recherche coderegion=93

$ awk -f script9.awk coderegion=93 depts2012.txt
ARGC =  3
ARGV[0] = awk
ARGV[1] = coderegion=93
ARGV[2] = depts2012.txt
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
93      13      13055   4       BOUCHES-DU-RHONE        Bouches-du-Rhône
93      83      83137   2       VAR     Var
93      84      84007   0       VAUCLUSE        Vaucluse
$

Exécution du script ayant comme argument de recherche codedept=44

$ awk -f script9.awk codedept=44 depts2012.txt
ARGC =  3
ARGV[0] = awk
ARGV[1] = codedept=44
ARGV[2] = depts2012.txt
52      44      44109   3       LOIRE-ATLANTIQUE        Loire-Atlantique
$

Exécution du script ayant comme argument de recherche codepostal=85191

$ awk -f script9.awk codepostal=85191 depts2012.txt
ARGC =  3
ARGV[0] = awk
ARGV[1] = codepostal=85191
ARGV[2] = depts2012.txt
52      85      85191   3       VENDEE  Vendée
$

Exécution du script ayant comme argument de recherche dept=VAR

$ awk -f script9.awk dept=VAR depts2012.txt
ARGC =  3
ARGV[0] = awk
ARGV[1] = dept=VAR
ARGV[2] = depts2012.txt
93      83      83137   2       VAR     Var
$

Exécution du script avec tous les arguments renseignés

$ awk -f script9.awk coderegion=93 codedept=44 codepostal=75056 dept=HAUTE-SAVOIE depts2012.txt
ARGC =  6
ARGV[0] = awk
ARGV[1] = coderegion=93
ARGV[2] = codedept=44
ARGV[3] = codepostal=75056
ARGV[4] = dept=HAUTE-SAVOIE
ARGV[5] = depts2012.txt
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
93      13      13055   4       BOUCHES-DU-RHONE        Bouches-du-Rhône
52      44      44109   3       LOIRE-ATLANTIQUE        Loire-Atlantique
82      74      74010   3       HAUTE-SAVOIE    Haute-Savoie
11      75      75056   0       PARIS   Paris
93      83      83137   2       VAR     Var
93      84      84007   0       VAUCLUSE        Vaucluse
$

Etiquettes: