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
$