P. 1
awk

awk

|Views: 76|Likes:
Published by Khalid Saidi

More info:

Published by: Khalid Saidi on May 05, 2011
Copyright:Attribution Non-commercial

Availability:

Read on Scribd mobile: iPhone, iPad and Android.
download as PDF, TXT or read online from Scribd
See more
See less

02/05/2012

pdf

text

original

1 Ann e Sp ciale Informatique e e ENSIMAG Grenoble 1992

LE LANGAGE AWK

Fr d ric LACROIX e e Dan Bog

2

3

Remerciements
Nous adressons ces pages d'encre noircies

notre ma^tre Serge Rouveyrol. e Nous remercions la famille roumaine Bog et la famille BOZO compos e de : e Gimo : trop petit pour sa gratte Gillou : sans qui nous n'aurions jamais connu Arthur Jackie : notre synth tiseuse de r^ve e e Nathalie dite Caro : ma ch rie. Grand a Pr^tre des Brumes Astrales et Xinurales. je t'adore e Le p.

re PNEC : il en bave a l'arm e e .

e Le ptose : fournisseur o ciel pour le mois de juin La m.

re Michel : pour avoir fait la lessive et la bou e e En n. j'embrasse le vieux Nain.. tous les grands Steaks et toute la famille au pays .. .

4 .

5 Introduction Ce livre est un hymne a l'Obscure. .

cet tat de l'Esprit lu par le fruit inconscient .

tendue in nie de verts paturages issus d'un savoir-faire e malthusien encore ignor . e e La premi. a e e de notre Ame. C'est un art conu pour faire naitre la passion. Aussi ces mots qui c ne sont qu'assemblages et imbrications de lettres vous paraitront sans signi cation aucune mais ils sont en fait la nature fondamentale qui r git l'univers de la r alit e e e et ces alin as qui sont noy s dans ce brouillard de silhouettes noirs sont cette part e e de r^ve sans quoi le monde ne pourrait exister. e C'est le langage AWK. Mais comme c'est trange de se retrouver dans cet tat e e e oubli dont il est possible de r^ver les nuits de somnolences inconscientes.

La deuxi.re partie de ce livre explique les principes essentiels de AWK de faon e c simple et de telle sorte que l'utilisateur les assimile facilement.

On pourra e e s'y r f rer apr.me partie de ce livre d taille chaque point du langage AWK.

s avoir bien compris chacun des exemples de la partie 1. ee e La derni.

re partie de ce livre donne quelques applications r elles trait es par AWK. e e e .

6 .

Chapter 1 Les principes essentiels de AWK 7 .

8 CHAPTER 1. LES PRINCIPES ESSENTIELS DE AWK .

9 .

LES PRINCIPES ESSENTIELS DE AWK 1.1 Introduction et d nitions e Le langage de programmation AWK est tr.10 CHAPTER 1.

50 10. En e g n ral. 3 AWK compte le nombre de lignes du chier d'entr e.50 0 10. ce nombre est plac e dans la variable globale NF dans l'exemple. . e e e Pour l'instant. NF = 4.50 0 1. 2 AWK compte le nombre de champs d'une ligne courante. NR = 9.data : Nom Nombre de cigarettes fumees par jour 20 15 10 10 20 15 0 10 0 Marque de cigarettes Prix du paquet de 20 cigarettes 10.50 6. e L'exemple de chier de donn es qui sera utilis dans toute la partie 1 sera le e e suivant : Fichier c.50 10.50 10. Le e e s parateur peut ^tre modi comme on le veut par la variable globale FS. un chier de donn es admet une structure coh rente qui peut se d nir de e e e e e la faon suivante : c champ 1 champ2 ::: champ n ligne 1 champ 1 champ2 ::: champ n ligne 2 ::::: ::::: ::::: ::::: ligne i champ 1 champ2 ::: champ n ligne q Les exceptions d pendent de la d nition m^me du type de donn es et peuvent ^tre e e e e e trait es lorsqu'elles sont parfaitement connues. chaque champ est s par par un ou plusieurs blancs.50 12. FS = " " . ce nombre est plac dans la e e variable globale NR dans l'exemple.s e cace dans la gestion de chiers.1.1 structure d'un chier de donn es e Serge Fredo Marc Alain Agnes Isabelle Pyr Thyll LeSaint Toute Camel Camel Peter_Bleu Goldo_Leg Royal_Ment Aucune Camel Aucune Quelques notions de champs et de s parateurs : e 1 Dans notre exemple.

50 Fredo 15 Camel 10. 1. awk ' print ' fic.50 2 Fredo 15 Camel 10.$4 ' fic.50 4 Pyr 0 4 Thyll 10.50 3 Marc 10 Camel 10.data 4 Serge 10.50 Marc 10 Camel 10.$1.$1.data Serge 20 Toute 10.50 7 Pyr 0 Aucune 0 8 Thyll 10 Camel 10.50 4 Agnes 6.50 6 Isabelle 15 Royal_Ment 12.50 4 Marc 10. INTRODUCTION ET DEFINITIONS Exemples : visualisation du chier d'entr e e imprime chaque ligne du chier.data ou awk ' print $0 ' fic. le premier puis le dernier champ de chaque e ligne prise en entr e.50 4 Isabelle 12.50 4 LeSaint 0 . e e e awk ' print NR.50 Pyr 0 Aucune 0 Thyll 10 Camel 10.50 Alain 10 Peter_Bleu 10.50 9 LeSaint 0 Aucune 0 crit le nombre de champ de la ligne. ligne par ligne.50 4 Fredo 10.50 LeSaint 0 Aucune 0 11 crit chaque champ s par d'un blanc virgule.1.data 1 Serge 20 Toute 10.50 4 Alain 10 Peter_Bleu 10.50 Agnes 20 Goldo_Leg 6.$NF ' fic.50 5 Agnes 20 Goldo_Leg 6.50 Isabelle 15 Royal_Ment 12.$2. e awk ' print NF.50 4 Alain 10.$3.

action n g.1. LES PRINCIPES ESSENTIELS DE AWK 1. prend le standard input c e e en tant que chier d'entr e. . il y a 2 faons g n rales d'ex cuter des instructions AWK: c e e e 1 pour des applications simples : awk 'program' chier1 ..2 ex cution d'un programme AWK e La commande "awk" est tout d'abord une commande UNIX et par cons quent en e pr sente tous les avantages pipe. AWK est un v ritable langage de programmation .12 CHAPTER 1. action 2. chier n liste des chiers de donn es en entr e e e 'program' est une liste d'instructions se pr sentant sous la forme qui sera e d nie dans la partie suivante : pattern f action 1. chier par chier.. criture de scripte shell avec des instructions awk.. ou s'il n'y a pas de chier en entr e. .. e La commande ex cute le programme. e e Mais surtout. e Exemple : imprime les lignes o. sur chaque ligne de e faon s quentielle. e Ainsi.

la chaine "Camel" apparait en troisi.

me champ. c'est-.

u e a dire les personnes fumant exclusivement des Camels.
awk '$3 == "Camel" Fredo 15 Marc 10 Thyll 10 Fredo 15 Marc 10 Thyll 10 print ' fic.data fic.data Camel 10.50 Camel 10.50 Camel 10.50 Camel 10.50 Camel 10.50 Camel 10.50

imprime une deuxieme fois

2 pour des applications plus complexes :

On ouvre un chier d'instructions awk et l'ex cution s'e ectue par la come mande :

awk -f chierprog liste optionnelle de chiers de donn es e
La commande ex cute s quentiellement le programme se trouvant dans le e e chier programme sur chaque ligne des chiers en entr e. e

1.1. INTRODUCTION ET DEFINITIONS
Exemple : Coh rence des donn es e e On met les instructions suivantes dans le chier " chierprog" :

13

NF != 4 print $0, "le nombre de champ n'est pas egal a 4" $2 0 print $0, "le nombre de cigarettes fumees doit etre positif ou nul" $4 0 print $0, "le prix doit etre positif ou nul" $4 20 print $0, "le prix des cigarettes est cher"

On lance le programme par la commande :

awk -f chierprog c.data

14

CHAPTER 1. LES PRINCIPES ESSENTIELS DE AWK

1.1.3 structure d'un programme AWK
$2 0 print ...

Nous avons vu pr c demment un exemple o

AWK tait employ comme une comee u e e mande UNIX et o.

.. Un pattern est une condition portant exclusivement sur une ligne du chier d'entr e e ou sur le standard input. e Un programme AWK se pr sente toujours de la faon suivante : e c PATTERN f ACTION g PATTERN f ACTION g ... e Exemples : imprime le nom des personnes qui fument. Une action s'e ectue lorsque la condition est valid e ou si elle est e ectivement e ex cutable....data Serge Fredo Marc Alain Agnes Isabelle Thyll la pr sence de pattern ou d'action n'est pas obligatoire : e crit toutes les lignes o.. des conditions et des actions taient combin es : u e e Ces deux arguments d nissent la structure d'un programme AWK... awk ' $2 0 pattern print $1 action ' fic........

c'est-. le second champ est nul.

awk '$2 == 0' fic.data L'op ration de base de AWK consiste a chantillonner la s quence des lignes e .-dire les lignes des personnes e u a ne fumant pas.data ou Pyr 0 Aucune LeSaint 0 Aucune awk ' if $2 == 0 0 0 print ' fic.

e e d'entr e les unes apr.

AWK travaille de faon s quentielle d'o.s les autres. recherchant les lignes qui sont "match es" par e e e chacun des patterns du programme.

son c e u int r^t pour la gestion de chiers. ee .

e e ee Nous donnons ici quelques exemples d'utilisation de format de sortie avec les deux fonctions print et printf dont la derni. INTRODUCTION ET DEFINITIONS 15 Nous supposerons maintenant que les lignes d'instruction sont crites dans le chier e " chierprog" et sont lanc s par l'alias cr e pr c demment "a". 1.1.

re s'apparente exactement .

4 quelques exemples printf cr e n'importe quel type de format en sortie.1. Imprime le nom des fumeurs et le nombre de cigarettes fum es en deux jours e $2 0 print $1.$2*2 Serge 40 Fredo 30 Marc 20 Alain 20 Agnes 40 Isabelle 30 Thyll 20 1. la fonction printf e a du langage C. e Le format est une string contenant des  Chaque  est associ a une valeur : il y a autant de  que de valeur. e.

valeur 3..25 LeSaint : F 0.00 Thyll : F 5. apres apres apres apres apres apres apres apres apres .. valeur 2. valeur 1.38 Pyr : F 0..50 Fredo : F 7..2f n".25 Alain : F 5.$2*$4 20 : $1 pour une string nom : $2*$4 20 pour un nombre avec 2 chiffres apres la virgule : retour chariot 1 1 1 1 1 1 1 1 1 jour jour jour jour jour jour jour jour jour pour pour pour pour pour pour pour pour pour Serge : F 10. printf "argent s .00 printf format.2f n argent argent argent argent argent argent argent argent argent depense depense depense depense depense depense depense depense depense depense apres 1 jour pour s : F .25 Agnes : F 6.50 Isabelle : F 9.88 Marc : F 5. $1.

2 D buter avec AWK : les fonctions et les varie ables usuelles Cette partie contient quelques notions essentielles lorsqu'on doit programmer en AWK. LES PRINCIPES ESSENTIELS DE AWK 1. L'un des principaux attraits du langage AWK est qu'.16 CHAPTER 1.

la fois les variables utilis es a e et leur type ne sont pas d clar s et qu'une variable peut aussi bien avoir un type e e correspondant .

une chaine de caract.

re ou .

e Puisqu'une variable peut avoir . AWK convertit la valeur d'une chaine en un nombre. un nombre ou m^me. ou vice-versa lors de l'ex cution du programme. elle peut correa e a e spondre aux deux types.

priori deux types. il faut faire attention quant .

a a son utilisation mais cela prof.

re au langage une tr.

$2 Fredo a l'etat stone : 25 1.s grande souplesse que ne peuvent e e se permettre le langage C ou le Pascal.2. Exemple : $1 == "Fredo" Fredo=10 $2=$2+Fredo string=$1 " a l'etat stone :" print string.1 aucune d claration de variable et de type e Les Patterns sont tr.

s utilis s pour s lecter les lignes d'un chier qui nous sont utiles e e e : lorsqu'un pattern est v ri . la ligne correspondante du chier est s lect e ou " e e e e match e " et s'il y a une action qui lui succ.

alors l'action est ex cut e sur cette e e e e ligne sinon la ligne est a ch e en sortie. ! =. =.  peuvent ^tre e utilis s .de. =. ==. e Cette section donne plusieurs grandes cat gories de patterns souvent employ s : e e 1 : S lection par comparaison e Les symboles de comparaison usuels  .

la fois sur des nombres et sur des chaines.2 la s lection par les Patterns : le "Matching" e . ": Gros fumeur" Serge : Gros fumeur Agnes : Gros fumeur 1. e a Exemple : imprime le nom des personnes suivi de la chaine ": gros fumeur" $2 = 20 print $1.2.

e pattern s lectionnant les lignes contenant les fumeurs qui d pensent par jour e e une somme sup rieure ou gale . 1.2. DEBUTER AVEC AWK : LES FONCTIONS ET LES VARIABLES USUELLES17 2 : S lection par calcul e Exemple : On peut e ectuer toutes les op rations arithm tiques les plus simples que ce e e soit dans l'utilisation des patterns ou dans l' criture d'une action.

50 6.50 F. il est possible d'e ectuer des recherches sur n'importe quel type de caract. e $1 "Fredo" Alain 10 Agnes 20 Peter_Bleu Goldo_Leg 10. 10.50 20 Toute 10. e e pattern s lectionnant toutes les lignes dont le premier champ est par ordre e alphab tique avant la chaine "Fredo". e e a $2*$4 20 Serge = 10.50 3 : S lection par texte e Exemple : On peut s lecter des lignes sp ci ant simplement un mot.50 Mais aussi.

re en utilisant des expressions r guli.

similaires au expression e e e r guli.res.

e e e Exemples : matche toutes les lignes o.res sous "ed" nous d taillons cet aspect dans le chapitre 2.

50 10.50 . y Isabelle Pyr Thyll 15 0 10 Royal_Ment Aucune Camel 12.50 0 10.50 10. apparait la chaine "Camel" m^me sous la forme u e "RallyeCamel" ou sous la forme "TETEDECamel". Camel Fredo Marc Thyll 15 10 10 Camel Camel Camel 10.50 matche les lignes contenant le symbole y et les imprime.

LES PRINCIPES ESSENTIELS DE AWK Comme en C. || et | .18 CHAPTER 1. && ---|| ---| ---AND OR NOT 4 : Combinaison de patterns Exemple : pattern imprimant les lignes o. OR et NOT sont repr sent s par e e e e &&. les op rateurs bool ens AND.

le nombre de cigarettes fum es est sup rieur u e e a .

10 ET o.

50 = 10 || $3 != "Camel" 5 : BEGIN et END Les patterns BEGIN et END jouent un r^le particulier et sont tr. u $2 10 && $3 == "Camel" Fredo 15 Camel ou | $2 10. la marque est Camel.

s souvent o e employ s. les actions qui lui e e succ. Lorsque BEGIN est utilis respectivement END.

dent sont e ectu es avant respectivement apr.

s que la premi.

re respece e e e tivement derni.

e e Exemple : BEGIN END print.50 6. print NOMBRE 20 15 10 10 20 15 0 10 0 MARQUE Toute Camel Camel Peter_Bleu Goldo_Leg Royal_Ment Aucune Camel Aucune PRIX 10.50 10. print "NOM NOMBRE MARQUE PRIX". NR print "VISUALISATION TERMINEE".50 0 NOM Serge Fredo Marc Alain Agnes Isabelle Pyr Thyll LeSaint Nombre de lignes lues : 9 VISUALISATION TERMINEE .re ligne du chier d'entr e soit lue.50 10. print "Nombre de lignes lues :".50 10.50 0 10.50 12. Ainsi. on peut e ectuer e e des programmes AWK sans avoir n cessairement de chier en entr e.print print  commentaires : action sur le fichier fic.data print.

2. 1. DEBUTER AVEC AWK : LES FONCTIONS ET LES VARIABLES USUELLES19 La syntaxe des actions est tout .

fait similaire

celle du langage C mais la grande a a di rence r side dans le fait qu'il n'y a aucune d claration de variable comme nous e e e l'avons dit pr c demment. ee Nous donnons quelques exemples d'instructions usuelles.

1.2.3 la programmation par les actions : les tests et les boucles

1 : if-else

Les patterns et les actions de test ou de condition sont

priori similaires mais a il faut bien voir qu'un pattern agit sur toutes les lignes d'un chier en entr e e r action en chaine alors qu'une action de test peut agir sur toute variable e tout en contr^lant l'ex cution du programme. o e

Exemple : Moyenne sur l'argent depens e par fumeur et par jour. e
$4 END 0 n=n+1; argent=$2*$4 20 + argent if n 0 printf " Argent depense en moyenne par fumeur par jour :" printf "5.2f pour d fumeurs n n", argent n, n else print "pas de fumeur parmi les", NR, "personnes" Argent depense en moyenne par fumeur par jour : 7.14 pour 7 fumeurs

2 : while

Exemple :

Sachant que le prix du paquet de cigarettes augmente tous les 6 mois de 10 , donnons les prix apr

prix i=i+1 END printf" n n" .s 2 ann es.1f". e e BEGIN $4 != 0 printf" n t Marque t6 mois t12 mois t18 mois t24 mois n" i=1. prix=$4.$3 while i =4 prix=prix*1.1 printf" t4.printf" n t10s".

0 14.7 16.8 11.i =NF.3 15.7 12.2 13.6 14.4 les op rations AWK sur les chaines de caract.0 14.$i printf" n" 20 Toute 15 Camel 10 Camel 10 Peter_Bleu 20 Goldo_Leg 15 Royal_Ment 10 Camel 10.50 10.4 15.data en cr ant une tabulation nt e $3 != "Aucune" for i=1.6 12 mois 18 mois 24 mois 12.7 14.50 10.50 12.0 14.4 15.50 6.7 12.50 Serge Fredo Marc Alain Agnes Isabelle Thyll 1.4 3 : for Exemple : imprime tous les fumeurs du chier c.7 7.6 11.6 11.7 12.5 18.4 9.4 15.i++ printf" t10s".2.0 8.6 11.9 15.6 7.0 15. LES PRINCIPES ESSENTIELS DE AWK 6 mois 11.20 Marque Toute Camel Camel Peter_Bleu Goldo_Leg Royal_Ment Camel CHAPTER 1.1 12.50 10.50 10.

data dans la variable "noms" puis imprime le r sultat e noms=noms $1 " " END print noms Serge Fredo Marc Alain Agnes Isabelle Pyr Thyll LeSaint En AWK. on peut assembler des chaines de caract.res e e 1 : la concat nation de chaine e Exemple : assemble tous les noms des personnes du chier c.

res sans que cela pose de e probl.

mes en crivant les chaines les unes .

e e a . la suite des autres.

1. AWK permet l'utilisation de fonctions pr e construites admettant des param. DEBUTER AVEC AWK : LES FONCTIONS ET LES VARIABLES USUELLES21 2 : les fonctions AWK Comme la plupart des langages.2.

e e e Les fonctions arithm tiques sont donn s dans le chapitre 2 et leur utilie e sation est tr.tres et retournant le r sultat de leur ex cution.

e e e e $4 != 0 print "log du prix :".09691 log du prix : 2.35138 log10 du prix : 1.35138 log10 du prix : 1."log10 du prix :".8718 log10 du prix : 0.02119 log du prix : 1.log$4 log10 log du prix : 2.52573 log10 du prix : 1.s simple: e Exemple : crit le logarithme n p rien puis le logarithme d cimal du prix des paquets.02119 log du prix : 2.812913 log du prix : 2.35138 log10 du prix : 1.02119 log du prix : 2.35138 log10 du prix : 1.02119 log du prix : 2.log$4.35138 log10 du prix : 1.02119 Les fonctions sur les chaines sont sp ci ques au langage AWK puisque toutes e les variables sont d nies comme des chaines de caract.

res. caract.a clate la chaine s. e e Nous donnons ici deux des fonctions les plus employ es : split et gsub. e La fonction splits.

re par caract.

ee Exemple : explosion de la ligne contenant la chaine Fr. tab i 1 2 3 4 Fredo 15 Camel 10.i++ print i.i =max.tab for i=1.re suivant le e e e s parateur FS et place chaque l ment clat dans le tableau a nous voyons e ee e e les tableaux plus bas. Elle retourne le nombre d' l ments du tableau a.50 . Fr max=split$0.

s. LES PRINCIPES ESSENTIELS DE AWK La fonction gsubr.22 CHAPTER 1.t substitue par s ce qui est match par l'expression e r guli.

re r. e e Exemple : suppression du dernier caract. globalement dans la chaine t.

re dans la chaine Fredo jusqu'.

$1 printf" ts n". $1 gsub a-zA-Z $ . sa n d nitive e a e et alors sortie forc e du programme par "exit". $1 printf" exit s est mort mais il meurt avec $1 n". chaine Mort lente de Fredo Fredo Fred Fre Fr F Fredo est mort mais il meurt avec $1 ."". e $1 == "Fredo" printf" Mort lente de s chaine=$1 while $1 != "" n".

2. 1. e Exemple : crit le chier d'entr e dans l'ordre inverse.tab 4 ="eur " tab 5 ="de ".i 0. . tab c  print "" Serge taxeur de clopes Avec l'option "in".50 1.5 les tableaux . Pour cette e raison.2. Nb Camel print " Nombre de Peter_Bleu fumees :".50 0 12.tab 3 ="x".i-- print x LeSaint 0 Aucune Thyll 10 Camel Pyr 0 Aucune Isabelle 15 Royal_Ment Agnes 20 Goldo_Leg Alain 10 Peter_Bleu Marc 10 Camel Fredo 15 Camel Serge 20 Toute i 0 10. e e x NR =$0 END for i=NR. les tableaux sous AWK sont appel s tableaux associatifs.la notion de tableaux associatifs La caract ristique qui fait que les tableaux en AWK sont di rents des tableaux e e employ s par les principaux langages est que les indices sont des chaines.tab 2 ="ta".50 10. DEBUTER AVEC AWK : LES FONCTIONS ET LES VARIABLES USUELLES23 AWK permet l'utilisation de tableaux pour stocker des chaines ou des nombres sans qu'il y ait besoin de les d clarer.50 6.$1 for c in tab printf"s". Nb "Peter_Bleu" Nombre de Camel fumees : 35 Nombre de Peter_Bleu fumees : 10 $3 ~ Toute tab 6 ="clo".50 10.tab 1 ="pes" printf"s ". l'ordre d'ecriture est quelconque.50 10. e Exemple : Camel Nb Camel +=$2 Peter_Bleu Nb "Peter_Bleu" +=$2 END print " Nombre de Camel fumees :".50 10.

LES PRINCIPES ESSENTIELS DE AWK En plus des fonctions pr -d nies. De m^me qu'en C.24 CHAPTER 1. une fonction se d nit de la faon suivante : e e c function nom liste de param. un programme AWK peut contenir ses propres e e fonctions.

tres f instructions g e La d nition des fonctions est enti.

e Exemple : Lorsque Fredo et Marc se rencontrent. il y a une consommation de cigarettes qui croit par rapport . Le corps de la focntion peut contenir l'instruction "return" qui retourne alors un tat ou une valeur vers l'instruction appelante.rement s par e du corps du programme princie e e e pal.

la normale de faon g om trique raison 2. On veut calculer au a c e e bout de combien de temps chacune des deux personnes aura consomm 20 cigarettes e sachant qu'il y a 15 heures dans une journ e de fumeur : e On utilise pour cela une fonction calcul qui value le temps en minute a partir du e .

nombre de cigarettes fum es par jour. e On utilise aussi la fonction arithm tique "int" qui prend la partie enti.

2. e 1.6 cr er une fonction par "function" e .re d'une e e valeur num rique.

1.i=0 whilex 20 i++ xold=x x=x+terme terme=2*terme cigaminute=x-xold 60 min=20-xold cigaminute temps=inti-1*60+min returntemps Temps de rencontre apres 20 cigarettes fumees pour Fredo : 4 heures 18 minutes pour Marc : 4 heures 56 minutes . tab "marc" -60*inttab "marc" 60 tab "fredo" =calcul$2 tab "marc" =calcul$2 function calculnombre normal=nombre 15 terme=normal x=0. inttab "fredo" 60 " d minutes n". tab "fredo" -60*inttab "fredo" 60 " t pour Marc : d heures". DEBUTER AVEC AWK : LES FONCTIONS ET LES VARIABLES USUELLES25 $1=="Fredo" $1=="Marc" END printf printf printf printf printf "Temps de rencontre apres 20 cigarettes fumees n" " t pour Fredo : d heures".2. inttab "marc" 60 " d minutes n".

2.7 les entr es : la fonction "getline " e Il y a plusieurs faons de cr er des entr es . LES PRINCIPES ESSENTIELS DE AWK 1.26 CHAPTER 1.

awk 'program' fic.d.data" 0 && $1=="Fredo" printf" Mort lente de s chaine=$1 while $1 != "" n".data | awk '$2 0 Fredo est un fumeur print "Fredo est un fumeur" ' La fonction " getline " lit l'enregistrement sur l'entr e et incr mente NR.data ."". chaine . un programme AWK. c.awk -f fichierprog fic. $1 gsub a-zA-Z $ . grep 'Fredo' fic.data puis le lire s quentiellement par les commandes : e . placer des donn es dans e e un chier c. $1 printf" ts n". La faon la plus c e e a c simple est celle que nous utilisons depuis le d but. Exemples : lit la ligne point e du chier " chier" : e getline "fichier" place dans la variable x la ligne point e du chier " chier" : e getline x "fichier" tous les exemples pr c dents peuvent ^tre crit avec la fonction getline en plaant ee e e c le corps du programme dans BEGIN : Mort lente de Fredo. $1 printf" exit s est mort mais il meurt avec $1 n". Elle ree e tourne 1 s'il n'y a pas eu d'erreur 0 si c'est la n de chier et -1 en cas d'erreur. BEGIN while getline "fic.data Une autre faon est d'utiliser les pipes : c Exemple : on utilise la commande grep pour s lectionner la ligne contenant "Fredo" e puis on travaille dessus.a.

8 les sorties et les int ractions avec d'autres programmes e : la fonction "system" Nous avons vu avec "print" et "printf" des exemples d'a chage en sortie sur le standard output mais il est possible aussi de diriger la sortie . DEBUTER AVEC AWK : LES FONCTIONS ET LES VARIABLES USUELLES27 Mort lente de Fredo Fredo Fred Fre Fr F Fredo est mort mais il meurt avec $1 Le programme se lance alors par la commande : awk -f fichierprog 1.2.2. 1.

Exemples : le premier exemple imprime les noms des fumeurs dans un chier nomm "nom". e le second exemple imprime . l'int rieur d'un proa e gramme awk vers un chier.

la suite du chier nom ainsi cr la marque de cigarette a ee fum e. e awk '$2 0 awk '$2 0 print $1 print $3 "nom" ' fic.data fichier "nom" resultant Serge Fredo Marc Alain Agnes Isabelle Thyll Toute Camel Camel Peter_Bleu Goldo_Leg Royal_Ment Camel .data "nom" ' fic.

LES PRINCIPES ESSENTIELS DE AWK Les int ractions avec d'autres programmes se font de faon di rente : e c e 1 : les pipes en sortie et en entr e e print | commande commande | getline Exemples : tri suivant le nom des fumeurs . ee e $2 0 END Marque $1 =$3 for c in Marque printf"8s t10s n". on utilise l'option "in" dans for ce qui nous permet d'obtenir tous les l ments du tableau constitu .28 CHAPTER 1. Marque c  | "sort -b +0" Agnes Alain Fredo Isabelle Marc Serge Thyll Goldo_Leg Peter_Bleu Camel Royal_Ment Camel Toute Camel d compte du nombre de personnes logg es sur le syst. c.

me Arthur .

n fredo ttyq1 Jun 12 bonhair ttyq2 Jun 12 gillou ttyq3 Jun 12 gemo ttyq4 Jun 12 jackie ttyq6 Jun 12 renz ttyq8 Jun 12 leptose ttyq13 Jun 12 personnes loggees sur Arthur : 15:28 17:21 17:35 16:01 17:35 16:47 16:52 7 peut aussi etre effectue par la commande Unix : who | awk ' n++.print x print "personnes loggees sur Arthur :". un instant e e e a donn .print END print "personnes loggees sur Arthur :". e BEGIN while "who" | getline x n++. n ' .

message " dev tty" Message 1 And my blood is 2 And my blood is 3 And my blood is : And my blood colder.2. BEGIN printf" t Message : " getline message print 1. closed is colder. closed the doors of my mind the doors of my mind the doors of my mind the doors of my mind . closed colder. 1. message | "cat 1 &2" system"echo '2 "message"' 1 &2" print 3. closed colder. DEBUTER AVEC AWK : LES FONCTIONS ET LES VARIABLES USUELLES29 2 : la fonction "system" La fonction "system expression" ex cute la commande e "expression" donn e sous forme de string : e Exemple : plusieurs exemples d'ecritures sur le standard erreur.

LES PRINCIPES ESSENTIELS DE AWK .30 CHAPTER 1.

Chapter 2 Le langage AWK en d tail e 31 .

32 CHAPTER 2. LE LANGAGE AWK EN DETAIL .

33 Ce chapitre explique. .

l'aide d'exemples. La premi. tous les ingr dients de programmation a e en AWK.

e Le chier d'entr e choisi comme exemple dans cette partie sera un chier texte e Fichier elds : Would you pay lifes pleasure to see me Does it heart for I want you to remain I run your hair through. les a ectations et les actions de tests et de boucles. in another decade Summerlands holds me in sumerian haze Between the spaces. forever remain .re section d crit les patterns en d tail. along the wall appearing faces that disappear at dawn Were getting closer. La seconde donne la description e e e des actions par les expressions. I can see the door closer and closer Kthulhu calls forever remain. des sorties. des entr es et e e comment des programmes awk peuvent int ragir sur d'autres programmes. Les sections restantes couvrent la d nition des fonctions.

LE LANGAGE AWK EN DETAIL 2.34 CHAPTER 2. Cette partie d crit e e e e les six types de patterns et les conditions sous lesquelles elles sont v ri es. e e MATCHE avant que toute entr e soit lue e apr. il o e e e matche la ligne concern e et l'action est ex cut e sur cette ligne.1 Les patterns Les patterns contr^lent l'ex cution des actions : quand un pattern est v ri .

s que toute entr e soit lue e e matche les lignes o.

le nombre u de champs est sup rieur .

NR==20 matche les lignes de 10 . 5 e a patterns sur chaines =closer= matche les lignes contenant la string "closer" compos de patterns e NF 5 && =I= matche les lignes contenant plus de 5 champs et contenant la string "I" intervalle NR==10.

20 a PATTERN BEGIN END expression EXEMPLE BEGIN END NF 5 .

2. LES PATTERNS 35 Les patterns BEGIN et END ne matchent aucune ligne en entr e.1. Les instructions e qui succ.

De e e e e faon similaire. les instructions qui succ.dent le pattern BEGIN sont ex cut es avant toute lecture en entr e.

dent le pattern END sont ex cut es apr.

e e Exemple : BEGIN print "on met en general les actions BEGIN en tete de fichier" NF 5 BEGIN printf"je suis toujours execute avant la premiere ligne d'entree n" on met en general les actions BEGIN en tete de fichier je suis toujours execute avant la premiere ligne d'entree Does it heart for I want you to remain I run your hair through.1. e BEGIN et END ne se combinent avec aucun autre pattern. Si plusieurs BEGIN apparaissent dans un programme. les actions associ es sont e ex cut es dans l'ordre auquel ils apparaissent dans le programme.s c e e e e toute lecture en entr e.1 BEGIN et END . in another decade Summerlands holds me in sumerian haze Between the spaces. along the wall appearing faces that disappear at dawn Were getting closer. I can see the door 2.

contrairement a tous les langages. LE LANGAGE AWK EN DETAIL Comme la plupart des langages de programmation. AWK est riche dans la description des op rations arithm tiques. Par contre. e e .36 CHAPTER 2.

AWK comprend des expressions sur les chaines de caract.

res. e Une string est une chaine de z ro ou plus de z ro caract.

res. La chaine "" est appel e la chaine nulle. Elles peuvent ^tre e e e e stock es dans des variables. ou peuvent apparaitre litt ralement en tant que des e e constantes telles que "Fredo". Le terme de e substring signi e une s quence de z ro ou plus de z ro caract.

res .

Ces op rateurs sont list s dans le tableau qui suit. l'int rieur d'une e e e e a e string. Si une e e e e expression a une valeur num rique mais qu'un op rateur requiert une string. alors la e e valeur num rique est automatiquement transform e en une string et r ciproquement. e e e Les patterns les plus typiques sont les comparaisons entre les chaines ou nombres. e e SIGNIFICATION plus petit que = plus petit ou gal . e e L'op rateur  tilde sera expliqu dans la partie suivant. Toute expression peut ^tre utilis e en tant qu'op rande de tout op rateur.

e a == gal a e .

!= di rent de e = plus grand ou gal .

e e Les strings sont compar es caract. si les 2 op randes sont num riques. tout op rande num rique est converti en une string e e e e et alors les op randes sont compar s en tant que string. sinon. e a plus grand que  match par e ! non match par e Dans le cas d'une comparaison. une comparaison e e num rique est e ectu e.

re par caract.

Une chaine est dite inf rieure .re selon l'ordre d ni par la mae e e e chine. souvent selon les codes ASCII.

c'est-. alors la ligne e courante est dite " match e ". Exemple : "Fumer" "Fumee" "Fumeur" "Stone" "Fumeur" "fumeur" 2.2 Les expressions OPERATEUR Lorsqu'un pattern de comparaison est valid e sur la ligne courante. une autre si e a elle apparait avant l'autre selon cet ordre.1.

-dire s lect e. e a e e .

2.1. LES PATTERNS 37 AWK permet de s lecter ou de matcher des chaines de caract.

res quelconques .

pare e a tir d'expressions sp ci ques appel es EXPRESSIONS REGULIERES qui sont e e tr.

s souvent utilis es en Shell et sous diteur. e e e Un pattern sur une chaine teste si la chaine contient e ectivement la substring match e par l'expression r guli.

re. e e e Le tableau ci-dessous donne les 3 grands types de patterns sp ci ques .

la recherche e a de chaines de caract.

res : e SIGNIFICATION Matche la ligne courante quand une substring est match e par l'expression r guli.

re e e e expression=expr.reg.= Matche la ligne courante si la chaine "expression" contient une substring match e par l'expression r guli.

= Matche la ligne courante si la chaine "expression" ne contient pas une substring match e par l'expression r guli.re e e e expression!=expr.reg.

re e e e L'expression r guli.

e Les deux autres types de patterns sp ci ques aux chaines utilisent un op rateur e e : l'op rateur tilde :  e expression ~ r expression !~ r r represente une expression reguliere 2. e e e Remarque : = Fredo = Ce pattern recherche la string "Fredo".1. Exemple : =Fredo= Ce pattern recherche sur chaque ligne les occurences de la substring "Fredo" et si cette chaine est trouv e m^me sous la forme FredoLeBon. alors la ligne est match e.re la plus simple est une suite de lettres ou de chi res entre e e slashs.3 Les patterns sp ci ques aux chaines e TYPE =expression r guli. une ligne contenant FredoLeBon ne sera donc pas match e.

re= e e L'op rateur  signi e "est match par" et l'op rateur ! constitue son compl ment. e e e e .

Would you pay lifes pleasure to see me I run your hair through. I can see the door closer and closer forever remain.38 Exemples : CHAPTER 2. LE LANGAGE AWK EN DETAIL $1 ~ e  matche toutes les lignes dont le premier champ  contient au moins un "e". Does it heart for I want you to remain Summerlands holds me in sumerian haze Between the spaces. along the wall appearing faces that disappear at dawn Were getting closer. forever remain $1 !~ e  matche toutes les lignes dont le premier champ  ne contient pas de "e". in another decade Kthulhu calls .

1.1.2.4 Les expressions r guli. LES PATTERNS 39 2.

res e e Une expression r guli.

re est une expression sp ci que contenant des symboles pare e e ticuliers. qui permet la s lection de n'importe quel type de substring d'un texte par e exemple. Elles sont toujours plac es entre slash : =r= comme nous l'avons d j.

vu dans la e ea partie pr c dente. Leur utilisation en tant que pattern se r sume donc . On les utilise aussi dans toutes les actions de conditions car nous ee savons que les actions de conditions tests et boucles s'apparentent beaucoup aux patterns.

: e a r expression ~ r expression !~ r r represente une expression reguliere Les caract.

. . .+.? sont a la base de toute construction d'expressions e .$.^.res n.j.

r guli.

ils sont appel s "m tacaract.res.

res". Si on veut matcher l'un de ses symboles e e e e e dans une expression r guli.

on doit placer un antislash e e e devant n$ matche le caract.re sous sa d nition naturelle.

e .re $ par exemple.

LE LANGAGE AWK EN DETAIL Le m tacaract.40 CHAPTER 2.

re n plac devant un autre m tacaract.

re le transforme en un e e e e e caract.

e Le m tacaract.re normal.

re n plac devant certains symboles sp ciaux matche aussi une e e e e s quence de tabulations voir le tableau ci-apr.

s e e SEQUENCE nb nf nn nr nt nddd nc SIGNIFICATION backspace : supprime le dernier caract.

re d'une chaine e formfeed : nouvelle page newline : nouvelle ligne carriage return : retour .

la ligne a tabulation : cr e une tabulation de 10 espaces e valeur octale ddd o.

ddd est trois nombres compris entre 0 et 7 u tout caract.

re pris sous sa forme litt rale e e except pour les caract.

^. : Le m tacaract.res : n : nn et " : n" e e 1. n..$.

re ^ matche le d but d'une string. e e e Le m tacaract.

re $ matche la n d'une string. e e Le m tacaract.

re . matche un caract.

re quelconque et un seul. un F en fin de chaine.. . le point en fin de chaine. . la chaine composee du simple caractere F.$ matche matche matche matche matche matche un F au debut d'une chaine. toute chaine composee de un seul caractere.. toute suite de trois caracteres.$ . e e e Exemples : ^F F$ ^F$ ^.

2. LES PATTERNS 41 2. : Une expression r guli.1.

re consistant en un groupe de caract.

res entour de e e e e crochets est appel e classe de caract.

res. elle matche chacun des caract.

res .

e Lorsqu'on veut matcher une s rie de caract. e e e a l'int rieur des crochets.

res qui se suivent d'apr.

e La classe compl mentaire d'une classe quelconque est d not e par le m tacaract. on peut utiliser le tiret.s l'ordre e e e d nie par la machine.

re e e e e e ^ apr.

s l'ouverture du crochet.E et O.E et O. matche toute chaine consistant en une lettre minuscule ou majuscule suivie d'un nombre.B et C. e Exemples : AEO ^AEO ^ ^ABC ^ ^a-za-zA-Z 0-9 matche chacun des caracteres A. matche toute chaine consistant en un seul caractere sauf les minuscules et "-". matche tout caractere en debut de chaine sauf A. matche tous les caracteres sauf A. A l'int rieur d'une classe de caract.

re. tout caract.

re admet sa signi cation e e e normale except les caract.

^ plac en d but et .plac entre 2 caract.res n .

. matche tout caractere en debut de chaine sauf l'accent ^. e e e e e e Ainsi : . ^ ^^ matche le point ".".res.

42 CHAPTER 2. LE LANGAGE AWK EN DETAIL Il y a deux op rateurs binaires sur les expressions r guli.

res : la concat nation e e e e et le ou. Si r1 et r2 sont des expressions r guli.

alors : e e r1jr2 matche toute string match e par r1 ou r2 .res. e r1r2 matche toute string de la forme xy o.

u Si r1 ou r2 ne contiennent pas d'op rateur j. les parenth. r1 matche x et r2 matche y.

j : . Exemple :  a-zA-Z ee  matche les substring contenant un caractere suivi  de la chaine "ee". forever|closer remain|and  matche les lignes contenant l'un des deux  mots presents dans la premiere parenthese  suivi par l'un des deux mots presents dans  l'autre parenthese. along the wall Were getting closer.ses peuvent ^tre e e e omises.  . forever remain 3. I can see the door closer and closer forever remain. to see me Between the spaces.

LES PATTERNS 43 4..? : Ces op rateurs unaires sont utilis s pour sp ci er des r p titions dans des exe e e e e pressions r guli.2. +.1.

.. e e r matche toute chaine consistant en z ro ou plus de z ro substring cons cutives e e e match es par r.. e r? matche la chaine nulle ou toute chaine match e par r..? 0-9 +?$ matche les nombres reels avec un signe optionnel et un exposant optionnel. FRE ou FRRE ou FRRRE. etc.? 0-9 + .. toute chaine de une ou plus de une lettre majuscule FRE... FRFRE. etc. ? 0-9 *| .. etc... 0-9 + eE +. FRE ou FRRE ou FRRRE. etc. e r+ matche toute chaine consistant en une ou plus de une substring cons cutives e match es par r. ^ +. FRFRFRE. . etc.res. FE ou FRE ou FRRE. FE ou FRE. e Exemple : F* FR*E FR+E FRR*E FR?E A-Z + FR+E : : : : : : : matche matche matche matche matche matche matche la chaine nulle ou F ou FF.

44 CHAPTER 2. LE LANGAGE AWK EN DETAIL Nous r capitulons dans le tableau ci-dessous toutes les expressions r guli.

c1 c2 ::: ^c1 c2 ::: c 1 . EXPRESSION c nc ^ $ .res que e e e l'on peut rencontrer et leur signi cation.c2 ^c1 -c2 r1 jr2 r1r2 r r+ r? r MATCHE le non m tacaract.

re c e e s quence de tabulation ou le caract.

re litt ral c e e e d but de string e n de string tout caract.

re e tout caract.

.re c1 . c2 . e tout caract...

c2 ...re sauf c1 .. e tout caract.

re de c1 .

c2 e a tout caract.

re non de c1 .

c2 e a toute chaine match e par r1 ou r2 e toute chaine xy o.

r1 matche x et o.

r2 matche y u u les parenth.

ses ne sont pas obligatoires si on n'utilise pas j e z ro ou plus de z ro chaines cons cutives match es par r e e e e une ou plus de une chaines cons cutives match es par r e e la chaine nulle ou toute chaine match e par r e toute chaine match e par r e .

forever remain 2. e e e Exemple : forever|closer && ^ fc closer and closer forever remain. pat2 peut matcher la m^me ligne que pat1 e donnant ainsi en r sultat de l'intervalle une seule ligne. incluse. in another decade Summerlands holds me in sumerian haze Between the spaces.5 Les compos s de patterns e 2. e Exemples : see . I can see the door I .6 Les intervalles On d nit un intervalle de patterns comme tant deux patterns s par s par une e e e e virgule telle que : pat1.1. I can see the door . see Does it heart for I want you to remain I run your hair through. && ET et j NON.1. LES PATTERNS 45 Un compos de patterns est un expression qui combine une s rie de patterns par un e e op rateur logique : jj OU.1. along the wall appearing faces that disappear at dawn Were getting closer.2. I to see me Does it heart for I want you to remain Were getting closer. e Un compos de pattern matche la ligne courante si l'expression valu e est vraie. pat2 Un intervalle de patterns matche chaque ligne entre une occurence de pat1 et la prochaine occurence de pat2 .

2 Les actions Dans la structure d'un programme AWK : PATTERN f ACTION g instruction PATTERN f ACTION g instruction ......... LE LANGAGE AWK EN DETAIL 2.....46 CHAPTER 2....... e e Parfois......... une action peut ^tre tr. les patterns d terminent quand une action doit s'ex cuter.....

. appel de fonctions.liste d'expression printfformat. elle regroupe une s rie de lignes contenant des fonctions. accolades e et autres l ments du vocabulaire non terminal qui d nissent toute la richesse du ee e langage AWK. souvent.. printformat. ou elle peut ^tre une a ece e e tation. a ectations.expression instructions for variable in tableau instruction do instructions while expression break continue next exit exit expression f expression g .liste d'expression if expression instructions if expression instructions else instructions while expression instruction for expression. Le tableau ci-dessous donne tous les l ments du vocabulaire de haut niveau ee intervenant dans une action : ACTIONS expressions avec des constantes.s simple : print . etc..expression. variables.

de tableaux. LES ACTIONS 47 2.2.2.1 Les Expressions Les expressions les plus simples sont des blocs primaires constitu s de constantes. d'appels . e de variables.2.

la valeur e e e de ces variables peut ^tre modi e par l'utilisateur tout en restant coh rent e e e avec sa d nition. 1.01 0.07E-1 ou 0. logique. e e Il y a deux types de variables sous AWK : 1. e . "me ". Les constantes. comparaison. 10e5. les chaines et les nombres. e e chi res et soulign s qui ne commencent pas par un chi re et qui ne font pas e partie du vocabulaire non terminal du langage AWK.00E6. En n. condie e tionelle et a ectation. des fonctions et de variables pr -d nies telles a e e que les s parateurs. variables. Une constante chaine est cr e en entourant la chaine de quotes : " telle que ee "pleasure ". variables pr -d nies e e Les variables 2. Une constante num rique peut ^tre un entier 2000 ou un r el sous toutes les formes e e e suivantes : 2000.07e-1 1e6. e Les op rateurs sur les expressions combinent les expressions entre elles et ils e entrent dans cinq grandes cat gories : arithm tique. AWK d termine son type e e e de part le contexte du programme. "?". les fonctions pr d nies et les fonctions que l'on peut construire utilisent e e les expressions et repr sentent aussi une grande classe d'expressions. Puisque le type d'une variable n'est pas d clar . les variables d nies par l'utilisateur : ce sont toutes les s quences de lettres. 0. "for". "". Ainsi. e Il existe deux types de constantes. "holds". les variables pr -d nies : il existe sous AWK des variables globales qui sont e e x es au d part et que l'on ne peut utiliser al atoirement. AWK convertit la valeur d'une chaine en un nombre ou en une chaine suivant la faon dont on veut utiliser c la variable.1e7 et 1000000 sont identiques Tous les nombres ont la pr cision maximale d pendant de la machine. Par contre.

ARGC " n" for c in ARGV print c.48 CHAPTER 2.i ARGC. FILENAME print "FNR=" FNR.i++ printf" s". VARIABLE ARGC ARGV FILENAME FNR FS NF NR OFMT OFS ORS RLENGTH RS RSTART SUBSEP Exemple : BEGIN OFS=" " print "nombre d'arguments :".ARGV c printf" n" for i=0. FILENAME nombre d'arguments : 2 0 1 fields awk fields awk fields fields 3 DEFINITION nombre d'arguments de la ligne de commande tableau d'arguments de la ligne de commande nom du chier d'entr e courant e nombre d'enregistrement du chier courant controle le s parateur de champ en entr e e e nombre de champ de l'enregistrement courant nombre d'enregistrements lus format de sortie pour les nombres s parateur de sortie e s parateur des enregistrements e longueur d'une chaine match e par la fonction "match" e controle le s parateur d'enregistrement en entr e e e d but de la chaine match e par la fonction "match" e e s parateur d'indice e DEFAUT "" ". ARGV i  printf" n n" printf"NOM du fichier1 : s n"."NR=" NR.$0 END printf"NOM du fichier2 : s n". la d nition et la valeur par d faut e e e de chacune de ces variables. LE LANGAGE AWK EN DETAIL Le tableau ci-dessous liste la forme litt rale.6g" "" "nn" "nn" "n034" NOM du fichier1 : fields .

2. along the wall NR=18 appearing faces that disappear at dawn NR=19 Were getting closer.2. in another decade NR=16 Summerlands holds me in sumerian haze NR=17 Between the spaces. in another decade NR=5 Summerlands holds me in sumerian haze NR=6 Between the spaces. I can see the door NR=9 closer and closer NR=10 Kthulhu calls NR=11 forever remain. ARGC . forever remain fichier2 : fields 49 On peut additionner des arguments a ARGV ou modi er son contenu. forever remain NR=12 Would you pay lifes pleasure NR=13 to see me NR=14 Does it heart for I want you to remain NR=15 I run your hair through. LES ACTIONS FNR=1 FNR=2 FNR=3 FNR=4 FNR=5 FNR=6 FNR=7 FNR=8 FNR=9 FNR=10 FNR=11 FNR=1 FNR=2 FNR=3 FNR=4 FNR=5 FNR=6 FNR=7 FNR=8 FNR=9 FNR=10 FNR=11 NOM du NR=1 Would you pay lifes pleasure NR=2 to see me NR=3 Does it heart for I want you to remain NR=4 I run your hair through. I can see the door NR=20 closer and closer NR=21 Kthulhu calls NR=22 forever remain. along the wall NR=7 appearing faces that disappear at dawn NR=8 Were getting closer.

peut aussi ^tre modi . A chaque n de chier d'entr e. awk traite l' l ment e e e ee suivant non nul de ARGV jusqu'.

mettre un l ment de ARGV . Ainsi. la valeur de ARGC-1 comme le nom du a prochain chier d'entr e.

nous voyons un exemple dans la partie Int raction e e avec les autres programmes. Le nom "-" peut ^tre utilis e e e e pour l'entr e standard. . z ro signi e e ee a e qu'il ne sera pas trait comme un chier d'entr e.

sinon x && y 1 si x et y sont vrais 0. sinon i in tab 1 si tab i existe..modulo   plus et moins unaire + logique NON j puissance incr ment e d cr ment e e champ groupement ^ ++ $  si x est vrai alors y sinon z 1 si x ou y sont vrais 0.50 CHAPTER 2. LE LANGAGE AWK EN DETAIL AWK permet la combinaison des expressions par les op rateurs. logiques et d'a ectation e e OPERATION a ectation conditionnel logique OU logique ET l ment de tableau ee matching relationel concat nation e OPERATEURS EXEMPLE = += -= = x = 2 = = ^= ?: x?y:z jj x jj y && in ~ !~ SIGNIFICATION x= x2 = == != = somme. 0 sinon x == y 1 si x est gal . soustraction + mult. 0 sinon $1 ~ x 1 si le premier champ contient un x.div. e Nous listons les di rents op rateurs dans le tableau ci-dessous.. e e les op rateurs arithm tiques.

sinon "Bad" " Deal" "Bad Deal". y e a 0. x++ additionne 1 . sinon x^y x^ y ++x. il 'y a pas d'op rateur explicite e de concat nation e x+y somme de x et de y xy reste de la division de x par y -x oppos de x e j$1 1 si $1 n'est pas z ro ou "" e 0.

x a $i+1 $i++ valeur du i.

me champ e additionn de 1 e additionne 1 .

la valeur a du i.

me champ e .

. et ^ qui s'e ectuent uniquement e e sur des nombres.2. jj OU et j NON sont uitlis s e e e pour cr er des expressions logiques en combinant d'autres expressions. LES ACTIONS 51 Op rateurs arithm tiques : Ce sont +.2. Toutes les op rations arithm tiques sont faites en pr cision maxie e e male. e Op rateurs logiques : Les op rateurs && ET. Si une variable sous forme de chaine constitue l'un des membres de l'op rateur. .-. Une exprese sion logique a une valeur de 1 si elle est vraie ou de 0 dans le cas contraire. AWK value les op rations de gauche . e elle est convertie en sa valeur qui doit ^tre un nombre.

droite et ne fait pas de travaux super us. e e Expressions de condition : Une expression de condition a la forme : expr1 ? expr2 : expr3 expr1 est valu e. e e a Exemple : pour expr1 && expr2. c.d. non nulle ou non gale . expr2 n'est pas valu si expr1 est faux. si elle est vraie.a.

sinon la valeur de l'expression est gale . la valeur de e e e a l'expression est gale a la valeur de expr2. "".

e .

=. Les 6 autres op rateurs d'a ectation sont +=. =. Op rateurs d'a ectation : Il y a 7 types d'a ectations dont la plus simple est de e la forme variable = expression. e a la valeur de l'expression expr3. Exemple : age=age-10 peut s' crire plus simplement age-=10 ce qui fait rajeunir.-=. e Op rateurs d'incr mentation et de d cr mentation : l'expression n=n+1 est plus e e e e commod ment repr sent e par n++ ou ++n. La forme pr x e ++n incr mente e e e e e e n avant de d livrer sa valeur alors que la forme post x e n++ incr mente n apr.= et ^= qui repr sentent e e une simpli cation d'utilisation du premier type d'op rateur d'a ectation pour cere tains cas particuliers.

e e Exemple: BEGIN printf" t tParodie de n=0 i=n++.j+n*10^n Parodie de la vie j'ai 1 ans et je viens de naitre j'ai 20 ans et je suis un jeune initie j'ai 300 ans et je suis parvenu a la sagesse .s e e e e avoir d livr sa valeur. printf" t j'ai ++n j=++i.n*10^i d ans et je suis un jeune initie n".n*10^j et je suis parvenu a la sagesse n". printf" t j'ai printf" t j'ai d ans la vie n" d ans et je viens de naitre n".

l ments de tableaux. Cet op rateur n'est pas explicite.52 CHAPTER 2. LE LANGAGE AWK EN DETAIL Op rateurs sur les chaines : il n'y a qu'un type d'op rateur sur les chaines : e e la concat nation. champs. les expressions sont cr es en e e ee crivant des constantes. variables. r sultats de fonce ee e tion ou autres expressions les unes .

along the wall 7:appearing faces that disappear at dawn 8:Were getting closer. in another decade 5:Summerlands holds me in sumerian haze 6:Between the spaces. la suite des autres a print NR ":" $0 1:Would you pay lifes pleasure 2:to see me 3:Does it heart for I want you to remain 4:I run your hair through. forever remain Chaines en tant qu'expressions r guli. I can see the door 9:closer and closer 10:Kthulhu calls 11:forever remain.

e e ee le membre de droite de l'op rateur ~ ou !~ tait une expression r guli.res : Dans beaucoup de nos exemples pr c dents.

convertit la chaine si n cessaire et e e e interpr.re entour e e e e e e de slashs. toute expression peut ^tre utilis e dans le membre de droite de e e ces deux op rateurs. AWK value l'expression. En fait.

te la chaine comme une expression r guli.

e e e Exemple : imprime les lignes o.re.

u BEGIN a_trouver = "see|closer" $0 ~ a_trouver to see me Were getting closer. I can see the door closer and closer Une expression r guli. apparaissent les mots see et closer.

?" decimal=" 0-9 + . 0-9 +" exposant=" eE " signe " 0-9 +?" nombre="^" signe "" decimal "|" fraction "" exposant "$" $0 ~ nombre . e e e Exemple : reconnaissance d'un nombre r el e BEGIN signe=" +.re peut ^tre pass e dans une expression de variable et ainsi e e e e peut aussi ^tre concat n e. ? 0-9 *" fraction=" .

LES ACTIONS 53 On peut donc construire une expression r guli.2.2.

re entre quotes comme on cone e struit une expression r guli.

il y a une seule exe e ception pour les m tacaract.re entre slashs pour les patterns.

lorsque l'on veut matcher le m.res.

tacaract.

re sous sa e e e e forme normale. on doit ajouter un extra slash dans la forme quot e : e $0 ~  +|- 0-9 + $0 ~ " +|- 0-9 +" .

54 CHAPTER 2. LE LANGAGE AWK EN DETAIL La suite donne quelques exemples d'utilisation d'expressions r guli.

Pour e e cela. nous modi ons l g.res.

Le chier elds a alors cette allure e Would you pay lifes pleasure to see me Does it heart for I want you to remain I run your hair through.$0 Les vers qui contiennent le mot "see" et qui ne contiennent pas le mot "I" 2 to see me  Exemples en utilisant des metacaracteres On affiche les vers commencant par une majuscule BEGIN print " Les vers commencant par une majuscule :"  prise en compte des blancs  en debut de ligne Les vers commencant par une majuscule : 1 Would you pay lifes pleasure 3 Does it heart for I want you to remain 4 I run your hair through. " ". I can see the door closer and closer Kthulhu calls forever remain. in another decade 5 Summerlands holds me in sumerian haze 6 Between the spaces. in another decade Summerlands holds me in sumerian haze Between the spaces.$0 BEGIN . along the wall appearing faces that disappear at dawn Were getting closer." " . along the wall 8 Were getting closer. forever remain  PATTERNS qui teste si une chaine contient  une substring en utilisant les expressions regulieres. print " Les vers qui contiennent le mot 'see' et qui ne" print " contiennent pas le mot 'I'" $0 ~ see && $0 !~ I print NR .rement le chier " elds" en ins rant en d but et en n de ee e e ligne une s rie quelconque de blancs. I can see the door 10 Kthulhu calls $0~ ^ * A-Z print NR.

$0 55 "e " :"  prise en compte des blancs  en fin de ligne Les vers se terminant par un "e" : 1 Would you pay lifes pleasure 2 to see me 4 I run your hair through.i =NF.2. in another decade 5 Summerlands holds me in sumerian haze On affiche les champs contenant la chaine "ces" BEGIN print " Les champs qui contiennent la chaine $0~ ces for i=1.2." ".i++ if $i~ ces  print $i " n" "ces " :" Les champs qui contiennent la chaine "ces" : spaces. LES ACTIONS On affiche les vers se terminant par "e" BEGIN print " Les vers se terminant par un $0~ e *$ print NR. faces .

d :" $0 !~ "^ * BAD |^ * bad " print On affiche les lignes ne commencant pas par les lettres B. LE LANGAGE AWK EN DETAIL On affiche les lignes ne commencant pas par les lettres B. forever remain .a.D.a.A.A.d : Would you pay lifes pleasure to see me I run your hair through.D.A. in another decade Summerlands holds me in sumerian haze Were getting closer.b.b.56 CHAPTER 2.a. I can see the door closer and closer Kthulhu calls forever remain.D.d : BEGIN print "On affiche les lignes ne commencant pas" print "par les lettres B.b.

Elles sont list es dans e e le tableau ci-dessous : VALEUR RETOURNEE cosinus de x. les fonctions arithm tiques : ces fonctions peuvent ^tre utilis es en tant qu'expression e e e primaire dans toutes les expressions d nies dans cette partie.2. LES ACTIONS 57 AWK a des fonctions d nies dans son propre langage qui sont les fonctions arithm tiques e e et les fonctions sur les chaines. avec x en radians arctangente de y x retourn e dans l'intervalle - et  e racine carr e de x e logarithme n p rien de x e e exponentielle de x partie enti.2. avec x en radians sinus de x.

-1 donne . 0  r 1 x d nit le point de d part dans la g n ration au hasard rand e e e e srand fait d buter le g n rateur selon l'heure e e e atan20. la fonction srandx d nit . e e La fonction rand retourne un nombre de pr cision maximale selon un pseudoe hasard. exp1 donne e.re de x e nombre au hasard r. En e et. le logarithme d cimal se d nit par logx= log10.

partir de x le d but de la g n ration e a e e e au hasard. Si on appelle srand sans param.

alors la g n ration commencera .tre.

rand commencera toujours . Si on n'appelle pas srand. e e e a partir de l'heure.

la m^me a e valeur.print x=rand.x sqrtx logx expx intx rand srandx 9 4 46 63 9 4 46 63 56 34 19 3 58 38 20 75 .print BEGIN int100*x int100*x int100*x int100*x srand x=rand.print int100*x int100*x int100*x int100*x Les Fonctions pr -d nies en AWK e e FONCTION cosx sinx atan2y. e Exemple : faites tourner deux fois les deux programmes suivants : BEGIN srand43 x=rand. chaque fois que le programme est appel .print x=rand.print x=rand.print x=rand.print x=rand.print x=rand.

58 CHAPTER 2. LE LANGAGE AWK EN DETAIL les fonctions AWK sur les chaines : AWK permet l'utilisation des fonctions pr d nies e e qui op.

rent sur les chaines. e e ROLE retourne le nombre de caract. Ces fonctions sont list es dans le tableau ci-dessous.

re de s e retourne la premi.

re position de la chaine t dans s e ou 0 si t n'est pas pr sent e matchs.list-expr retourne list-expr formatt e selon le format fmt e substrs.r teste si s contient une substring match e par r e retourne l'index ou 0 valeurs dans RSTART et RLENGTH sprintffmt.p retourne le su xe de s commenant a la position p c .

n retourne la substring de s de longueur n et commenant a la position p c .p. substrs.

a clate s dans un tableau a selon le s parateur FS e e retourne le nombre d' l ments du tableau a ee splits.a.fs clate s dans un tableau a suivant le s parateur fs e e retourne le nombre d' l ments du tableau a ee subr. splits.s substitue par s la plus .

s. gauche et la plus longue a substring dans $0 match e par r e retourne le nombre de substitutions faites subr.t substitue par s la plus .

gauche et la plus longue a substring dans t match e par r e retourne le nombre de substitutions faites gsubr.s.t substitue par s toutes les chaines match es par r dans t e retourne le nombre de substitutions faites r repr sente une expression r guli.s substitue par s toutes les chaines match es par r dans $0 e retourne le nombre de substitutions faites gsubr.

n et p sont des entiers. e e e s et t sont des strings.t . . Exemple : BEGIN 44 chaine="Tous ces vieux en longs habits print lengthchaine de Cours !?" FONCTION lengths indexs.re.La fonction lengths retourne la longueur de la chaine s en tenant compte des blancs.

La fonction indexs.t retourne la position la plus . LES ACTIONS 59 .2.2.

Le premier caract. gauche de la chaine t dans a la chaine s ou 0 si t n'apparait pas.

re d'une chaine a la position e 1 et les blancs sont pris en compte. Exemple : BEGIN 5 x=index"Les nana ben's". "na".r cherche la substring la plus longue et la plus .La fonction matchs.print x .

gauche a qui est match e par l'expression r guli.

re r dans la chaine s. Elle retourne l'index e e e o.

la substring commence ou 0 si r ne matche rien. Elle impl mente aussi les deux u e variables RSTART .

la valeur de l'index et RLENGTH .

expr1.print x Would you to see Does it I run Summerlands holds Between the appearing faces Were getting closer and Kthulhu calls forever remain.NR. la longueur de la substring a a match e. expr2 . a la position 19 8. . exprn  retourne sans l'imprimer une chaine contenant expr1. $1. :::. a la position 24 6. . $2. a la position 20 11.  0 printf"la virgule apparait a la ligne d.La fonction sprintffmt. a la position d n". ee e Exemple : x=sprintf"11s 7s". :::. e Exemple : if match$0. exprn formatt e selon le format d ni par l'expression e e fmt et en se r f rant aux sp ci cations de la fonction "printf".RSTART la la la la virgule virgule virgule virgule apparait apparait apparait apparait a a a a la la la la ligne ligne ligne ligne 4. a la position 15 . expr2.

p retourne le su xe de s qui commence . LE LANGAGE AWK EN DETAIL .60 CHAPTER 2.La fonction substrs.

n est utilis . alors seulement les n premiers caract.p. la position p. a Si substrs.

res sont retourn s. e e e Si le su xe est de longueur inf rieure .

n. e a e Exemple : supprime le "s" de "lifes" de la ligne 1 et concat. alors tout le su xe est retourn .

fs clate la chaine s dans le tableau a selon le s parateur e e fs et retourne le nombre d' l ments ins r s dans le tableau a.1.t cherche d'abord la substring la plus .La fonction subr. "is". Cette fonction sera ee ee mieux d crite dans la partie r serv e aux tableaux.s.4.ne le r sultat avec e e d'autres chaines. e e e . $5 life is pleasure .a.La fonction splits. NR==1 print substr$4.

s. si une substring est trouv e. gauche et la plus a longue match e par r dans la chaine cible t. e e La fonction subr.s est synonyme de subr. La fonction gsubr. . Elle retourne le nombre de substitutions e ectu es.s. elle est e e alors substitu e par la string s.$0.t est similaire sauf qu'elle e ectue toutes les substitutions sur la chaine t a chaque fois qu'elle trouve une substring match e par r.

tout caract. e Dans la string qui substitue.

e e Exemple : comparez les deux fonctions sub et gsub : NR 5 sub .ou . in another decade .ou .print OUld you pay lifes pleasure to see me Does it heart for I want OU to remain I run OUr hair through. in another decade NR 5 gsub .print OUld OU pay lifes pleasure to see me Does it heart for I want OU to remain I run OUr hair thOUgh."OU".re apparait sous sa forme litt rale."OU".

LES ACTIONS Le programme qui suit recupere les premiers champs des lignes tout en supprimant ceux qui apparaissent deux fois : on concatene tous les premiers champs pour creer une expression reguliere a chaque fois qu'un nouveau champ reapparait. Pour le test.2. on rajoutera la ligne suivante au fichier "fields" : to escape your body from this Funeral end NR==1 champ="" $1 "" NR!=1 && $1!~champ gsub END print champ 61  .champ."".champ=champ "|" $1 "" Would|to|Does|Funeral|I|Summerlands|Between|appearing| Were|closer|Kthulhu|forever .2.

e Nous regroupons tous les types d'actions de tests et les boucles dans la liste cidessous : instruction g groupement d'instructions if expression instruction si expression est vraie. LE LANGAGE AWK EN DETAIL La syntaxe des tests et des boucles est la m^me que celle du langage C. ex cution de instruction e if expression instruction1 else instruction2 si expression est vraie.62 CHAPTER 2. apr. ex cution de instruction1 e sinon ex cution de instruction2 e while expression instruction tant que expression est vraie. ex cution de instruction e do instruction while expression ex cute une fois instruction.

expression3 instruction quivalent .s. idem que while e e for expression1. expression2.

expression3g for variable in tableau instruction ex cute instruction avec la valeur de variable e gale . : e a expression1. while expression2 finstruction.

for ou do force le commencement de la prochaine it ration e dans le programme principal force le programme . for ou do e force le commencement de la prochaine it ration e dans une boucle while. chaque indice pris dans un ordre quelconque de tableau e a f Les actions de tests et les boucles break continue next sort imm diatement d'une boucle while.

ex cuter les actions END s'il en existe a e sinon sort du programme retourne expression exit exit expression .

2. Les instructions next et exit controlent le d roulement d'un programme AWK e . for ou do.l'instruction "continue " provoque le commencement de l'it ration suivante : le e programme ex cute alors l'expression de test du while ou du do ou expression3 du e for.l'instruction "break" provoque une sortie forc e d'une boucle while. . e .2.l'instruction "next" provoque le passage . LES ACTIONS 63 Il y a donc deux instructions qui modi ent le cycle normal des boucles : break et continue.

la prochaine ligne du programme et a l'ex cution du programme reprend .

la prochaine instruction patternfactiong. Dans toute autre action.dans les actions END. e a . cela cause la n de toute lecture d'entr e et les actions END sont e alors ex cut es. l'instruction "exit" provoque la n du programme. e e .

les indices d'un tableau sont d nis comme des chaines ce qui constitue e une grande di rence vis . ee e e e On peut ainsi cr er un tableau comme sous n'importe quel type de langage : tableau e de chaines ou de nombres indic par des nombres Ex : x NR = $0.64 CHAPTER 2. LE LANGAGE AWK EN DETAIL AWK permet la cr ation de tableaux qui n'ont pas besoin d'^tre d clar s et dont le e e e e nombre d' l ments n'a pas besoin d'^tre sp ci . e En fait.

les l ments associ s . vis des langages usuels. puisque la valeur des chaines 1 et "1" est la m^me. dans le premier cas. il revient e au m^me d' crire tab 1 et tab "1" . Ainsi. On parle alors de TABLEAUX e a ASSOCIATIFS. e l'indice sera la valeur de la variable disappear et comme c'est une constante.On remarque par contre que tab 01 est di rent e e e de tab 1 et tab disappear est di rent de tab "disappear" .

i =NF. ee e a e e Exemple : nombre d'occurence des mots commenant par une voyelle minuscule. e for i=1. c tri sur le r sultat. tab disappear seront accumul s dans l' tat disparu tab "" .i++ gsub . .$i ++tab $i  suppression de la virgule Les Tableaux END printf"nombre d'occurence des mots n" printf"commencant par une voyelle minuscule n" for mot in tab  if mot~ ^ aeiouy  printf"s:d n".tab mot |"sort" close"sort" nombre d'occurence des mots commencant par une voyelle minuscule along:1 and:1 another:1 appearing:1 at:1 in:2 it:1 you:2 your:1 .mot."".

e Les r sultats sont impr visibles si de nouveaux l ments sont ajout s dans le tableau e e ee e par les instructions. LES ACTIONS 65 Le programme pr c dent utilise une forme de l'instruction "for" qui boucle sur ee tous les indices du tableau : for variable  in tab instructions La boucle ex cute les instructions avec la variable prenant comme valeur chaque e indice du tableau.2. On peut d terminer si un indice apparait dans un tableau ou non par l'expression e indice in tab Cette expression prend la valeur 1 si tab indice existe d j.2. L'ordre dans lequel les variables prennent les valeurs des indices est al atoire.

. . Le silence eclatant de ses reves n" printf" tQui enivrent d'ouragans une ame delivree n" Silence.i++ gsub . et 0 sinon. ea Exemple : cherche si "Death" est dans le tableau tab cr pr c demment.$i ++tab $i END if "Death" in tab printf" tO flammes du sommeil sur un visage d'ange n" printf" tEt sur toutes les nuits et sur tous les visages n" else printf" tSilence.i =NF. ee e e for i=1. Le silence eclatant de ses reves Qui enivrent d'ouragans une ame delivree L'instruction delete d truit un tableau avec la syntaxe : e delete tab indice Exemple : for i in zombi delete zombi i  le tableau zombi est mort ."".

Le nombre de champs e produits ou le nombre d' l ments de tab est retourn par la fonction. e e BEGIN chaine="cheveux en petard" max=splitchaine. ee e Exemple : clatement de la chaine "cheveux en petard" selon le s parateur e. Bien que l'on puisse utiliser des . "e" for i=1.tab.i++ print tab i ch v ux n p tard On peut aussi cr er des tableaux multidimensionels en AWK qui sont en fait des e simulations utilisant des tableaux a une dimension.66 CHAPTER 2. tab.i =max.fs clate la valeur de la chaine str en champs selon le e s parateur fs et place chacun des champs dans le tableau tab. LE LANGAGE AWK EN DETAIL La fonction split str.

awk concat.r. indices tels que i.j ou s.q.p.

ne les indices en glissant un s parateur e e entre eux pour former un unique indice qui n'a plus rien .

if i. les indices sont stock s comme des chaines qui ont la forme : e 1 SUBSEP 1 1 SUBSEP 2 . voir avec l' criture de a e l'utilisateur...j in tab .j =10. L'exemple : for i=1....i =10.. il su t de faire : e e ee for k in tab .1 1.. ..j =0 cr e un tableau de 100 l ments dont les indices ont la forme : e ee 1....j++ tab i.i++ for j=1.. La valeur de la variable pr -construite SUBSEP est par d faut " e e Pour r cup rer tous les l ments du tableau..2 En fait. 034" Pour tester si une entit appartient ..

un tableau multidimensionel. on peut crire : e a e .

2.SUBSEP print "tab " k " =".1 1.2.x. LES ACTIONS Exemple : BEGIN for i=1." x 2 " =".j++ tab i.1 2.i =2.tab k tab tab tab tab 11 12 21 22 = = = = 2 3 3 4 tab tab tab tab 1.j =i+j for k in tab splitk.2 = = = = 2 3 3 4 .i++ for j=1.2 2.j =2.tab k 67 " tab " x 1 ".

AWK autorise l'utilisateur . LE LANGAGE AWK EN DETAIL 2.68 CHAPTER 2.2 Cr er une Fonction e En plus des fonctions pr -d nies.2.

Une fonction se d nit de la faon suivante : e c function nomliste de param. cr er ses propres e e a e fonctions.

tres e f g instructions La forme g n rale d'un programme AWK devient maintenant une s quence de e e e pattern-action suivie des d nitions des fonctions cr s par l'utilisateur. e ee La liste des param.

tres est une s quence de variables s par es par des virgules. .

e e e e a l'int rieur du corps de la fonction. ces variables r f.

rent aux arguments pass s en e ee e param.

e Le corps de la fonction peut contenir l'instruction return qui retourne la valeur d'une expression qui peut servir dans le niveau sup rieur appelant. les param.tre lors de l'appel de la fonction. return expression A l'int rieur d'une fonction. L'expression est e optionnelle.

Mais e e e toutes les autres variables sont globales. si une variable n'est pas dans la liste des param. elles ne e e durent que le temps d'ex cution de la fonction et sont ensuite d pil es.tres sont des variables locales.

elle peut r f rencer a une variable existant dans le programme appelant e ee .tres.

et ainsi on peut en craser son contenu. e .

2.2. LES ACTIONS 69 Exemple : valuation a l'aide du programme pr c dent des mots qui apparaissent e .

maxi printf" Mots les plus frequents dans ce dedale obscur n t t "" for c in tab if tab c ==maxi printf"s ".i =NF."". b return a b ? a : b Mots les plus frequents dans ce dedale obscur "the I closer remain" C'est la parole des Fields . c printf" b " n t C'est la parole des Fields n" function maxa.$i ++tab $i END for c in tab maxi=maxtab c . ee le plus de fois dans le chier " elds". for i=1.i++ gsub . .

2.3 Les sorties Les fonctions print et printf g n. LE LANGAGE AWK EN DETAIL 2.70 CHAPTER 2.

rent les sorties sous AWK. "print" est utilis e e e e comme nous l'avons d j.

vu pour des critures simples alors que "printf" demande ea e un format d' criture que nous d taillons dans cette partie. expression . un pipe que vers le standard output.. c e e print crit $0 sur le standard output. termin es par ORS. e e e e print expression. expression .. chier crit dans le chier " chier" en l'ouvrant s'il n'existe pas e ou en l' crasant s'il existe d j.. Les sorties peuvent aussi e e bien ^tre redirig es vers un chier. crit les expressions s par es par OFS.. e print expression. Nous listons e e dans le tableau qui suit toutes les faons possibles de g n rer des sorties.

. expression . e . chier crit a la suite du chier " chier".. e ea print expression..

expression.. expression .expression. expression .expression. closecommande systemcommande idem que pour "print" en sp ci ant un format .. j commande close chier.expression.. e e printfformat. chier printfformat.. expression ... printfformat. chier printfformat.. expression . j commande crit vers l'entr e de commande.. print expression... expression .

e e . la valeur retourn e est celle de commande. e a cl^ture la connection entre "print" et chier ou commande o fermeture des pipes. chaque fois. ex cute commande.

. LES ACTIONS La fonction "print" a deux formes : print expr1. L'instruction print est quivalente .. .. .. exprn printexpr1.2..2. expr2. . exprn 71 qui ont le m^me r^le : criture de chaque expression s par e par le s parateur de e o e e e e champ de sortie OFS : output eld separator et suivie du s parateur d'enregistrement e de sortie ORS : output record separator. expr2.

print $0 : elle crit l'enregistrement $0 en e a e sortie. L'instruction print "" crit une ligne blanche en sortie. e Les s parateurs de sortie : e Il existe deux s parateurs de sortie : OFS qui d nit le s parateur entre chaque e e e champ et ORS qui d nit le s parateur apr.

" " gsub ing ." n" T21 1 The seven keys." nIn front of my " FS ..T21 1  print "The seven keys".T21.. In front of my faces.. That's the last exit for the lost .. Appeared. e Exemple : BEGIN FS="faces" OFS="."ed". $0 ~ FS "..T21 1  gsub"^a"... " ORS=" nThat's the last exit for the lost .. n" max=split$1......." La fonction "printf" est similaire ..s un enregistrement un enregistrement e e e tant une ligne de champs."A"....

exprn printfformat.. il y a e a deux formes d' criture de son expression : e printf format. expr2. . De m^me que "print". . .. celle du langage C. exprn Le format est une expression qui contient . expr2. expr1. expr1. ...

la fois du texte normal et des sp ci cations a e sur le format de sortie des expressions pass es en arguments .

e a . la fonction "printf".

LE LANGAGE AWK EN DETAIL Chaque sp ci cation commence par un . se termine par un caract.72 CHAPTER 2.

Nous donnons dans les tableaux qui suivent la liste des caract.nombre justifie a gauche l'expression. taille maximale de la chaine ou nombre de chiffres apres la virgule.re qui e e d termine la conversion requise et peut inclure trois autres modi cateurs : e largeur . determine l'emplacement en nombre de cases ou sera placee la chaine ou le nombre.

3s| |-10.3s| |10. e CARACTERE c d e f g o s x  c d 5d e f 7.3s|  FORMAT D'ECRITURE caract.res qui interviennent e dans l' criture des formats et des exemples de leur utilisation.6g o 06o x |s| |10s| |-10s| |.2f g .

re ASCII e partie enti.

5 97.5 97.dddddd e ou f selon ce qui est le plus court.50 97. $1 .ddddddE +.5 97.5 97 97 97 Death Death Death DEATH DEATH DEATH Death a 97 97 9.5 97. aucun argument n' tant utilis .5 141 000141 61 |Death| | Death| |Death | |DEA| | DEA| |DEA |  FORMAT : fmt EXPRESSION : $1 printffmt.5 97.re d'un nombre e .d. e e e 97 97.ddd.500000 97.5 97.750000e+01 97.dd . supprime les z ros en trop e nombre octal non sign e chaine nombre hexad cimal non sign e e crit un .5 97.

2. along the wall appearing faces that disappear at dawn Were getting closer. printf" * -43s * n". forever remain Last song of "The Nephilim" --------------------------* * * * * * * * * * * On peut crire dans deux chiers .n n" "newfields" "newfields" 73 . LES ACTIONS Les redirections dans les chiers s'e ectuent par les op rateurs et e Exemple : BEGIN printf" t t "THE FIELDS OF THE NEPHILIM " n" printf" t t -------------------------. $0 "newfields" END printf" n t tLast song of "The Nephilim " n" "newfields" printf" t t--------------------------.2. I can see the door closer and closer Kthulhu calls forever remain. in another decade Summerlands holds me in sumerian haze Between the spaces.n n" "newfields" Resultat dans le fichier "newfields" "THE FIELDS OF THE NEPHILIM" -------------------------* * * * * * * * * * * Would you pay lifes pleasure to see me Does it heart for I want you to remain I run your hair through.

$2 $3 Lors de la lecture du chier d'entr e. on peut lire et crire dans deux chiers e a e di rents mais on ne peut crire et lire dans un m^me chier. la fois. le premier e champ de chaque enregistrement est crit sur le standard output et le deuxi. e e e Exemple : print $1.

me e e champ est crit dans le chier dont le nom est la valeur du troisi.

e e .me champ.

74 CHAPTER 2. LE LANGAGE AWK EN DETAIL Les sorties dans les pipes sont possibles uniquement si le syst.

me supporte les e pipes. L'instruction : print | "commande" redirige la sortie de "print" vers l'entr e du pipe associ e .

La commande est mise sous quotes. Les pipes e e a sont similaires a ceux employ s sous Shell. . "commande ".

e Exemple : $1 ~ ai|os $NF ~ ai|os REMAIN CLOSER CLOSER REMAIN print $1 | "tr a-z print $NF | "tr a-z A-Z " A-Z " Il est n cessaire de fermer les pipes ou les chiers que l'on a ouvert en lecture e ou en criture si on veut .

nouveau s'en servir dans le m^me programme ou dans e a e un programme di rent. Dans l'exemple pr c dent. on doit fermer le pipe de la e ee commande par : close"tr a-z A-Z " Si on veut crire dans un chier apr.

s l'avoir lu dans un programme. e . il est n cessaire e e e de fermer le chier en lecture par : close"fichier" Nous verrons quelques exemples dans la partie Int raction avec d'autres programmes.

e e utiliser "awk" en tant que commande UNIX .2. grep 'forever' fields | awk ' print "Death will come" print "To cover all your sad wishes" $NF="in your faces" print $0 ' Death will come To cover all your sad wishes forever remain. le e standard input est pris par d faut. s'il n'y a pas de chier en entr e. e e Exemple : la commande "grep" recupere une ligne du fichier "fields" et un message s'affiche alors a l'ecran.2. e awk 'programme' fichier_entree ou arguments awk 'programme' standard input 2.a.d.2. forever in your faces Les s parateurs sur l'entr e : e e Il y a deux s parateurs d'entr e comme il y a deux s parateurs de sortie : FS Field e e e Separator quivalent . LES ACTIONS 75 Il y a plusieurs faons d'invoquer des entr es vers un programme AWK.4 Les entr es e En tant que commande UNIX. La plus c e courante est celle que nous avons employ e tout au d but du chapitre 1. l'entr e peut aussi ^tre un pipe. c.

aussi les e . OFS le s parateur de champs et RS Record Separator e a e quivalent a ORS le s parateur d'enregistrements qui en g n ral est " n".

e e e termes de lignes et d'enregistrement sont synonymes. FS qui par d faut vaut " " peut ^tre modi en une expression r guli.

Alors. la substring non nulle la plus .re toujours e e e e e mise entre quotes.

gauche et la plus longue a match e par l'expression r guli.

re deviendra le s parateur de champ dans la ligne e e e e courante. A chaque fois que l'expression r guli.

NF est e e increment et la substring devient la chaine nulle "".re matche une substring. A chaque enregistrement. NF e est r initialis .

i =NF. $i printf"d n".i++ printf"s ". *|a" for i=1. 1. e ea Exemple : FS est initialise a "a" ou a la virgule suivi d'une suite de blancs BEGIN FS=".NF Would you p y lifes ple sure 3 to see me 1 Does it he rt for I w nt you to rem in 4 I run your h ir through in nother dec de 5 .

*|a' -f fichierprog fields Remarque : les di rentes versions de awk ne pr voient pas l'utilisation d'une e e expression r guli. LE LANGAGE AWK EN DETAIL Summerl nds holds me in sumeri n h ze 4 Between the sp ces long the w ll 5 ppe ring f ces th t dis ppe r t d wn 9 Were getting closer I c n see the door 3 closer nd closer 2 Kthulhu c lls 2 forever rem in forever rem in 4 FS peut aussi ^tre modi directement dans la ligne de commande en ajoutant e e l'option -F.NF Commande de lancement du programme : awk -F'. Sur l'exemple pr c dent. on peut donc ex cuter le programme contenu ee e de le chier " chierprog" en ayant pr alablement supprim l'action BEGIN : e e Le fichierprog se presente donc maintenant comme : for i=1. $i printf"d n".i++ printf"s ".i =NF.76 CHAPTER 2.

re apr.

souvent il est seulement possible d' crire un e e e e seul caract.s l'option -F.

re entre quotes apr.

s l'option -F Ex : -F'a' place FS="a". e e RS d nit la s paration entre chaque enregistrement et vaut par d faut " n" quivalant e e e e donc .

une ligne. on peut a l'initialiser . Si on veut faire des enregistrements de plusieurs lignes.

"" et par exemple d nir la ligne compl.

.te comme un champ en prenant a e e FS=" n".

2. LES ACTIONS 77 La fonction getline : La fonction "getline " peut ^tre utilis e pour lire des enregistrements en entr e.2. Elle e e e cherche l'enregistrement suivant et remet .

jour les di rentes valeurs de NR. Elle retourne 1 si un e enregistrement est e ectivement pr sent. Nous explicitons dans le tableau suivant les possibilit s d'occurrence de la fonction e getline et leur signi cation : EXPRESSION SIGNIFICATION getline lit sur le standard input et remplit les variables $0.NF et FNR getline variable lit l'enregistrement sur le standard input et le met dans variable tout en remettant a .NR. NF a e et FNR d pendant de l'enregistrement lu et du programme. 0 si la n de chier est rencontr e ou -1 si e e une erreur se produit.

jour NR et FNR getline " chier" lit l'enregistrement suivant dans " chier" et le met dans $0 tout en remplissant NF getline variable " chier" lit l'enregistrement suivant dans " chier" et le met dans variable commande | getline lit la sortie de commande et le place dans $0 tout en remettant .

jour la valeur de NF a commande | getline variable lit la sortie de commande et le place dans variable L'expression getline "fichier" lit .

partir du chier " chier" la ligne courante a plut^t qu'.

L'expression getline x "fichier" lit . partir du standard input. L'expression ne modi e pas NR et FNR mais o a installe la nouvelle valeur de NF.

NR et FNR. on decide de remplacer include "fields" par le contenu du chier "fields". Exemple : quand on rencontre l'expression include "fields" dans un programme. L'expression ne modi e pas NF. . partir du chier " chier" le prochain enrega istrement et le place dans la variable x .

On lance la commande awk -f fichierprog f et on obtient : Would you pay lifes pleasure to see me Does it heart for I want you to remain I run your hair through. LE LANGAGE AWK EN DETAIL Le fichier programme "fichierprog" se presente de la facon suivante : ^include gsub " . along the wall appearing faces that disappear at dawn Were getting closer. in another decade Summerlands holds me in sumerian haze Between the spaces.78 CHAPTER 2. I can see the door closer and closer Kthulhu calls forever remain. . forever remain a world without end where no soul can descend there will be no sumertime how lost lifes been afraid of waking up so afraid to take the dream shapes of angels the night casts lie dead but dreaming in my past and their here they want to meet you they want to play with you so take the dream can't break free and I hear them call they want to plange you their here once more they want to take you to the shame of your past take the dream take me lead me far away take me there I'll fade away but I can't hide."".$2 while getline x $2 0 print x next print Le fichier "f" se presente de la facon suivante : include "fields" a world without end where no soul can descend there will be no sumertime how lost lifes been afraid of waking up so afraid to take the dream shapes of angels the night casts lie dead but dreaming in my past and their here they want to meet you they want to play with you so take the dream can't break free and I hear them call they want to plange you their here once more they want to take you to the shame of your past take the dream take me lead me far away take me there I'll fade away but I can't hide.

Nous avons alors le nom de l'utilisateur e dans le premier l ment du tableau ainsi cr par l' clatement de d. pour r cup rer le e e e nom des utilisateurs."F".a 1  printf" ts. a 1  Fredo. Chaque it ration du while lit une ligne de la liste des utilisateurs logg s et e e place la ligne dans la variable d. Bozo et sa Basse Voyez la di rence avec le programme suivant o. Bozo et sa Basse n".a if a 1 ~ fredo  gsub f . Puisque NF n'est pas modi . nous sommes oblig s d' clater la ligne contenue dans la variable e e d selon le s parateur de champ habituel FS. Ce programme ee ee e se lance par la commande awk -f fichierprog BEGIN while "who" | getline d splitd.2.2. LES ACTIONS 79 L'exemple qui suit ex cute la commande UNIX "who" et pipe le r sultat vers e e getline.

nous n'utilisons plus la variable d. . e u NF est cette fois remis a jour.

Caro et ses gros lolos Remarque : dans tous les cas o. Caro et ses gros lolos n".$1 printf" ts."F". BEGIN while "who" | getline if $1~ fredo  gsub f . $1 Fredo.

"getline " est utilis e. il se peut qu'une erreur se prou e duise si le chier .

acc der n'existe pas.. Ainsi crire while getline "fichier" . Nous conseillons d'utiliser while getline "fichier" 0 qui teste si aucune erreur se produit dans la lecture du chier. a e e peut ^tre dangereux et peut tourner en rond ind niment si le chier " chier" e e n'existe pas. ..

80 CHAPTER 2. LE LANGAGE AWK EN DETAIL Les variables dans la ligne de commande : Comme nous l'avons d j.

... print "ARGC=" ARGC.. ARGV 2 contient et ARGV 3 contient d.i =ARGC-1. ARGV 0 contient awk..les options et le programme ne sont pas prises en compte ARGV 1 =fields Les arguments pass s dans la ligne de commande peuvent ^tre utilis s en tant que e e e variable uniquement dans les actions BEGIN. f1 f2 . sinon ils sont trait s comme des noms e de chier et chaque argument est pass dans la variable FILENAME dont le contenu e est mis en entr e du programme. vu. f2 . e bog=roumain Exemple : awk -F'a' '$2=="ppe" print. e Ecrivant la ligne de commande : awk -f fichierprog b bog=roumain d ARGC a la valeur 4. -f fichierprog f1 f2 .. ARGV 1 contient b. Dans ces lignes de commande. On utilise aussi le chier "f" pr c demment e ee cr .i++ print "ARGV " i " =" ARGV i ' fields appearing faces that disappear at dawn ARGC=2 ARGV 0 =awk --. ARGC est gal au nombre d'arguments plus e un car le nom de la commande awk est l'argument z ro. e Exemple : On place le programme qui suit dans " chierprog" et on le lance en passant deux fois le chier " elds" en entre .. 'programme' f1 f2 .. Les arguments dans la ligne de commande : Les arguments d'une ligne de commande AWK sont accessibles via le tableau ARGV. f1.. ee .. for i=0. La valeur de la variable ARGC est gale au nombre d'arguments plus un. repr sentent des arguments qui sont nore malement des chiers. une ligne de commande AWK peut avoir plusieurs ea formes : awk awk awk awk 'programme' f1 -f fichierprog -F'separateur' -F'separateur' f2 .

print print " nActions END :" FILENAME="f" print "FILENAME=" FILENAME while getline "f" 0 if $0~ ^a  print Actions BEGIN : ARGC=3 ARGV 0 =awk ARGV 1 =fields ARGV 2 =fields FILENAME=fields FILENAME=f Actions sur les arguments en tant que fichier : FILENAME reprend la valeur de ARGV 1 FILENAME=fields appearing faces that disappear at dawn FILENAME=fields appearing faces that disappear at dawn Actions END : FILENAME=f a world without end where no soul can descend and I hear them call they want to plange you their here once more . LES ACTIONS BEGIN print "Actions BEGIN :" print "ARGC=" ARGC for i=0.i =ARGC-1.i++ print "ARGV " i " =" ARGV i print "FILENAME=" FILENAME FILENAME="f" print "FILENAME=" FILENAME print " nActions sur les arguments en tant que fichier :" print "FILENAME reprend la valeur de ARGV 1 " 81 $0~ ^a END print "FILENAME=" FILENAME.2.2.

5 Les Int ractions avec les autres programmes e Exemple : On prend les deux chiers suivants : FICHIER1 : Je suis le fichier 1 FICHIER2 : Je suis le fichier 2 La fonction AWK system expression ex cute la valeur de la chaine expression e prise comme commande. LE LANGAGE AWK EN DETAIL 2. La valeur retourn e est celle de la commande ex cut e.2." '". e e e Le programme qui suit int ragit avec la commande UNIX "cat" e BEGIN while 1 printf" tFichier a lire n" printf" tQuitter : Q n" Reponse=convert print Reponse if Reponse!="Q" system"cat " Reponse else exit function convert  getline chaine gsub ' .82 CHAPTER 2.chaine "echo "chaine" | tr ' a-z *' ' A-Z *'" | getline CHAINE return CHAINE La fonction "convert" convertit tous les caract.

res en majuscules. e .

nous avons oubli de fermer le pipe de e Il est necessaire de le fermer par l'instruction : La fonction convert devient : "echo "chaine" | tr ' a-z *' ' A-Z *'" close"echo "chaine" | tr ' a-z *' ' A-Z *'" function convert  getline chaine gsub ' .2. LES ACTIONS Ex cution : e awk -f fichierprog Fichier a lire Quitter : Q fichier1 FICHIER1 Je suis le fichier 1 Fichier a lire Quitter : Q fichier2 FICHIER2 Je suis le fichier 2 Fichier a lire Quitter : Q fichier1 FICHIER2 Je suis le fichier 2 83 Attention.2." '".chaine "echo "chaine" | tr ' a-z *' ' A-Z *'" | getline CHAINE close"echo "chaine" | tr ' a-z *' ' A-Z *'" return CHAINE .

LE LANGAGE AWK EN DETAIL Nous pouvons r aliser une commande Shell .84 CHAPTER 2.

nous avons utilis l'option -f ou nous avons plac le proe e gramme . partir d'un programme AWK. Dans e a la plupart de nos exemples.

. a e Pour r duire le nombre d'instruction . ex cuter entre quotes : awk ' print $1 ' ..

. nous pouvons mettre la ligne de come a mande et le programme dans un chier ex cutable que l'on invoquera en tapant e uniquement le nom du chier. qui ecrirait les 2eme. 5eme et 7eme champs de chaque enregistrement.. pour chaque fichier en entree.. awk ' print $1 ' $* chmod +x champ1 champ1 est place dans le fichier "champ1" pour rendre "champ1" executable execute le programme sur la liste des fichiers liste de fichiers Supposons maintenant que l'on veuille cr er une commande champ qui crit une e e combinaison arbitraire de champs sur chacun des chiers en entr es : e champ 2 5 7 . fichier1 fichier2 . taper.. Comment reconnaitre les num ros de champ des chiers ? On peut le faire gr^ce .

$champ i . e a a la variable ARGV : awk ' BEGIN for i=1. i ' $* nf ? " " : " n" .i =nf. for i=1.i++ printf"ss".ARGV i ~ ^ 0-9 +$ .i++ champ ++nf =ARGV i ARGV i ="" if i =ARGC ARGV ARGC++ = "-"  pas de noms de fichier  donc force stdin .

2.2. LES ACTIONS champ 2 4 6 fields f you lifes see it for want run hair in holds in haze the along wall faces disappear dawn getting I see and calls remain. remain world end no will no how afraid take dream dreaming my and want play you I them they want take to the take lead fade but can't 85 .

86 CHAPTER 2. LE LANGAGE AWK EN DETAIL .

Chapter 3 Applications 87 .

APPLICATIONS .88 CHAPTER 3.

transformation. Les programmes sont des r sultats d' tudes prolong es e e e men es sur la nature qui nous environne. traitement de donn es e Gestion de base de donn es e G n ration de texte.89 Ce chapitre contient quelques exemples d'applications en AWK et comment on peut utiliser le langage AWK. e AWK peut jouer un r^le non n gligeable dans plusieurs domaines tels que : o e Validation. mise .

.... Interpr tation. Transformation de langages e Exp rimentation sur des algorithmes e . des formats sp ciaux e e a e Compilation. ....

APPLICATIONS 3.90 CHAPTER 3.1 Base de donn es e Cette partie montre comment AWK peut ^tre utilis pour extraire des renseignee e ments et g n rer des r sultats .

partir de donn es stock es dans des chiers. e e e a e e Une certaine structure de donn es a t choisie dans notre exemple mais il est clair e ee que la technique peut ^tre appliqu e .

n'importe quelle structure .

partir du moment e e a a o.

elle est bien sp ci e et o.

elle ne varie pas al atoirement. u e e u e Nous avons choisi un exemple r el d'interrogation d'une base de donn es qui pourrait e e ^tre pr sente dans n'importe quelle discoth.

e e Le chier se pr sentera alors de la faon suivante : e c STYLE : COLD THE FIELDS OF THE NEPHILIM THE NEPHILIM: ELIZIUM: DAWNRAZOR CD=568. le nombre de disques selon le type cassette. e e e les groupes.1 Introduction 3.1.que. CD ou disque vinyl pr sent dans le magasin et les prix associ s. les titres des albums. Elle regroupe par style de musique. le nombre disponible et leur prix et par titre e d'album prix. le nombre et le prix seront ignor s : e Exemple : Dans le cas precedent.1365 au prix de 72 album F par F par F par F par est de : unite unite unite unite On e ectue une interrogation par style de musique liste de tous les groupes avec les renseignements associ s dans le style de musique demand . groupe et style : e --------Style de musique Groupe Titre d'album Quitter . disque vinyl et lorsqu'il n'y a plus de disque dans un certain type. CD.2 Sp ci cations e On classe dans la section SUPPORT la disponibilit pr sente en magasin par type : e e cassette. K7=54: VINYL=21: K7=1365 87. 67: 34: 72 GROUPE : ALBUM : SUPPORT: PRIX : .. disponibilit . par groupe liste de e e tous les albums pr sents dans la base..1. 3. la disponibilite pour chaque THE NEPHILIM : CD ---568 au prix de 87 K7 ---54 au prix de 67 ELIZIUM : VINYL ---21 au prix de 34 DAWNRAZOR : K7 ---.

1. le programme bouclera et chaque r sultat d'interrogation sera . 3. BASE DE DONNEES 91 Tant que le choix Quitter n'est pas choisie.

la fois a ch sur la sortie standard et mis dans un e a e chier "out.data" o.

tous les r sultats seront m moris s. u e e e Nous permettons aussi la modi cation de la base de donn es.Tous les caract. e Le chier de donn es est denomm musique. Nous avons choisi une structure de e e donn es avec les particularit s suivantes : e e .

e .Le champ ". e e . " est un sous-champ de d tection a l'int rieur e .res doivent ^tre en majuscule.Le champ de d tection du style de musique est "".Le champ s parateur entre les l ments virtuels est ": " e ee qui est initialis en d but de programme. e e .

46. 67: 34: 72 JOY DIVISION STILL: TO THE CENTER VINYL=365: CD=1356. K7=453 102. K7=354: VINYL=29. 62 3. VINYL=2356. 87: 34. K7=45: K7=384: CD=543. VINYL=132.1. VINYL=485.3 Le chier de donn es e GROUPE : ALBUM : SUPPORT: PRIX : GROUPE : ALBUM : SUPPORT: PRIX : GROUPE : ALBUM : SUPPORT: PRIX : GROUPE : ALBUM : SUPPORT: PRIX : GROUPE : THE SISTERS OF MERCY ALBUM : MARIAN: TEMPLE OF LOVE SUPPORT: CD=3565. 75 THE FIELDS OF THE NEPHILIM THE NEPHILIM: ELIZIUM: DAWNRAZOR CD=568. K7=54: VINYL=21: K7=1365 87. K7=324 74. 74: 70: 103. VINYL=2341. K7=827 43: 100. 43 BAUHAUS BELLALUGO IS DEAD CD=5439. 65. e Il se pr sente comme suit : e * STYLE : COLD THE CURE BOYS DON'T CRY: SEVENTEEN SECONDS: PORNOGRAPHY: FAITH CD=23. K7=543: CD=453. e d'un l ment virtuel qui permet de distinguer le type ee de support et le prix qui lui est associ . K7=3545 .

58 . VINYL=126. 41. K7=43211 85. 31: CHAPTER 3. 29. 43. VINYL=764 84. K7=54: VINYL=21: K7=1365 87. VINYL=2346. 65 AC DC TOUCH TOO MUCH: FOR THOSE ABOUT TO ROCK: BACK IN BLACK CD=568.92 PRIX : 86. K7=5742 42. 69 THIS MORTAIL COIL DEATH SHALL COME CD=654 83 DEAD CAN DANCE THIS NIGHT CD=654. 31: 85. VINYL=877: CD=2346. APPLICATIONS GROUPE : ALBUM : SUPPORT: PRIX : GROUPE : ALBUM : SUPPORT: PRIX : GROUPE : ALBUM : SUPPORT: PRIX : * STYLE : GROUPE : ALBUM : SUPPORT: PRIX : GROUPE : ALBUM : SUPPORT: PRIX : GROUPE : ALBUM : SUPPORT: PRIX : GROUPE : ALBUM : SUPPORT: PRIX : GROUPE : ALBUM : SUPPORT: PRIX : ROSES TO THE JUNGLE: DON'T CRY VINYL=765: CD=931. K7=133 93. K7=84: VINYL=51: K7=7365 87. 62: 33: 76 TELEPHONE LA BOMBE HUMAINE: ARGENT TROP CHER CD=541. 58 WHITE LION I DREAM OF YOU VINYL=439. 34 HARD GUN'S N WELCOME CD=653. 93. 74 THE MISSION CARVENDISH CD=743. K7=5643 92. 67: 34: 72 TRUST MARCHE OU CREVE: MISSIONNAIRE: BON SCOTT CD=578. 72: 78. 29.

43 ALAN PARSON PROJECT EYE IN THE SKY: STEREOTOMY CD=3545. K7=466: VINYL=768. K7=466: VINYL=768. K7=254 86. 39: 67: 68. 3. 62: 31. K7=324 74. BASE DE DONNEES GROUPE : ALBUM : SUPPORT: PRIX : * STYLE SCORPIONS I'M STILL LOVING YOU VINYL=432. K7=371 42. 62 . K7=254 86. K7=371 42. K7=320: CD=346. VINYL=3545: K7=32: CD=3456.1. 63: 31. 43 GROUPE : ALBUM : SUPPORT: PRIX : GROUPE : ALBUM : SUPPORT: PRIX : GROUPE : ALBUM : SUPPORT: PRIX : GROUPE : ALBUM : SUPPORT: PRIX : * PINK FLOYD THE WALL: THE DARK SIDE OF THE MOON: OBSCURED BY CLOUDS: ANIMALS: RELIC S CD=543. K7=543: VINYL=54. K7 91. 58: 81: 37. 58: 62 BARCLAY JAMES HARVEST VICTIMS OF CIRCUMSTANCE CD=5439. 65 93 : TECHNO FRONT 242 CRAZY VINYL=432. 63: 31. 62 GROUPE : ALBUM : SUPPORT: PRIX : GROUPE : ALBUM : SUPPORT: PRIX : * STYLE : ROCK NEW MODEL ARMY IMPURITY: I'M PRIED OF YOU CD=3545. 52: 74: 41. K7=324 74. 68: 79. 65 ALIEN SEX FIEND SEX IS BEAUTIFUL CD=5439.

APPLICATIONS Ce programme fonctionne exclusivement sur un syst.94 CHAPTER 3.

" print " t Maintenant taper V n" getline vi if vi ~ ^ *V *$  system"vi musique" function groupe .Q n" system"rm out.data" Reponse="" while Reponse !~ ^ *Q *$  && Reponse !~ printf" n n" printf" tRecherche printf" t printf" t printf" tRevenir a printf" t getline Reponse if Reponse ~ if Reponse ~ if Reponse ~ ^ *P *$  par groupe par album par style de musique l'etat precedent QUITTER --------------------- 1 2 3 P Q n" n" n n" n n" n" ^ *1 *$  groupe ^ *3 *$  style ^ *2 *$  album close"out.data" print " tVotre choix se trouvent aussi dans le fichier else if decision ~ ^ *M *$  "out.4 Programme printf" n tRecherche ou Mise a jour printf" t QUITTER getline decision if decision ~ ^ *R *$  ----. Le programme fnac est le suivant : BEGIN FS=" : " while Reponse !~ ^ *Q *$  && decision !~ ^ *Q *$  3.me tel que UNIX et montre e aussi ses limites.R .1. M n" ----.data " n" print " tVous allez modifier sous l'editeur "vi " d'UNIX la base" print " tMais ATTENTION a respecter la syntaxe.

1. 3. BASE DE DONNEES printf"Nom du groupe? t" G=convert trouve=0 while getline "musique" 0 && trouve==0 if $1 ~ GROUPE && $2==G trouve=1 affichage if trouve==0 printf" n tLe groupe ne se trouve pas dans la base n n" close"musique" returntrouve 95 function style printf"Style de musique? t" ST=convert trouve=0 while getline "musique" 0 && trouve==0 if $1 ~ STYLE && $2==ST trouve=1 getline "musique" while $1!="*" getline "musique" affichage if trouve==0 printf" n tCe style de musique n'existe pas n n" close"musique" return function album printf"Titre de l'album recherche? t" A=convert trouve=0 while getline "musique" 0 && trouve==0 .

data" printf" tLe nombre de K7 disponibles : d au prix : d FF n".data" system"cat o.data" system"cat o.prix ind_k7  "o.nb_cd .nb_k7 .data" print "********************************************************" "o.data" close"o.data" system"rm o.data" close"musique" return function affichage  if $1 ~ GROUPE  printf" n tNom du groupe : s n".data" printf" tStyle de musique : s n n".A "o.data" printf" tLe nombre de VINYL disponibles : d au prix : d FF n".gr "o.prix ind_v  "o.data out.data" printf" n tNom du groupe : s n".$2 "o.prix ind_cd  "o. nb_v.sty "o. APPLICATIONS i=2 while i =NF && trouve==0 if $i==A trouve=1 else i++ if trouve==0 printf" n tL'album n'est pas dans la base n n" else ind_cd = ind_v =ind_k7 = 0 decode_sup decode_prix printf" n tAlbum recherche : s n".data" .96 if $1 ~ if $1 ~ if $1 ~ STYLE  sty=$2 GROUPE  gr=$2 ALBUM  CHAPTER 3.data" printf" tLe nombre de CD disponibles : d au prix : d FF n".data" getline "musique" printf" tTitre des albums : n" "o.

ind_k7 = j function decode_prix getline "musique" split$i.data" system"rm o. 3.data" system"cat o.i =NF. " returnprix . " for j in sup splitsup if nb 1 if nb 1 if nb 1 return j .data" getline "musique" print "*********************************************************" "o.$i "o.1.data" system"cat o.data out.data" close"o.i++ printf" t t s n".prix.". BASE DE DONNEES 97 for i=2.nb. ind_cd = j ~ VINYL  nb_v = nb 2 .sup."=" ~ CD  nb_cd = nb 2 . ind_v = j ~ K7  nb_k7 = nb 2 ." '".".chaine "echo "chaine" | tr ' a-z *' ' A-Z *'" | getline C close"echo "chaine" | tr ' a-z *' ' A-Z *'" returnC function decode_sup nb_cd = nb_v = nb_k7 = 0 split$i.data" print " n" return function convert getline chaine gsub ' .

des expressions r guli.98 CHAPTER 3. APPLICATIONS Le programme utilise la plupart des pouvoirs du langage AWK sur la gestion d'un chier de donn es. On y rencontre explicitement l'utilisation : e 1.

par l'utilisateur sous toute leur forme : majuscule ou minuscule. 2 . s par es par e e des blancs.res par exemple dans l'acquisition des r ponses donn es e e e e champs avec la fonction split. des fonctions pr -d nies AWK par exemple dans la construction des souse e vertit toute chaine de caract.

res en majuscule tout en supprimant les blancs e et qui renvoie la chaine ainsi modi e. la majorit des entr es-sorties en AWK : la fonction getline lisant le standard e e input acquisition de donn es de l'utilisateur ou le chier musique acc. e 4 .

s .

data ou out. e e a la base de donn es. des fonctions cr es par l'utilisateur par exemple la fonction convert  qui conee 5 . les pipes. 3 .data ou vers le standard output et en y associant la fonction close . des fonctions UNIX par la fonction system  ou directement en entr e de la e fonction getline pour viter de construire des fonctions existant d j. les fonctions print et printf redirig es vers un e e chier o.

dans le e ea syst.

me UNIX. e Nous donnons un exemple d'ex cution du programme .

e a Nous lanons le programme par awk -f fnac c . la page suivante.

BASE DE DONNEES Recherche ou Mise a jour QUITTER R Recherche par groupe par album par style de musique Revenir a l'etat precedent QUITTER 1 Nom du groupe? The Cure --------------------1 2 3 P Q --------R . M Q 99 Nom du groupe : THE CURE Titre des albums : BOYS DON'T CRY SEVENTEEN SECONDS PORNOGRAPHY FAITH ********************************************************* Recherche par groupe par album par style de musique Revenir a l'etat precedent QUITTER 2 Titre de l'album recherche? Album recherche : DON'T CRY Nom du groupe : GUN'S N ROSES Style de musique : HARD Le nombre de CD disponibles : 931 au prix : 85 FF Le nombre de VINYL disponibles : 126 au prix : 29 FF Le nombre de K7 disponibles : 43211 au prix : 58 FF ******************************************************** Don't cry --------------------1 2 3 P Q . 3.1.

data" Recherche ou Mise a jour QUITTER M --------- R .... .. Maintenant taper V V ------MODIFICATIONS.. M Q Vous allez modifier sous l'editeur "vi" d'UNIX la base Mais ATTENTION a respecter la syntaxe... APPLICATIONS --------------------1 2 3 P Q Votre choix se trouvent aussi dans le fichier "out.100 Recherche par groupe par album par style de musique Revenir a l'etat precedent QUITTER P CHAPTER 3..

d.2 Des mini-langages AWK est souvent utilis pour d velopper des interpr teurs. c. e .2. des lane e gages destin s a des applications sp ci ques. DES MINI-LANGAGES 101 3.3. des assembleurs et autres e e e exp rimentations sur la syntaxe ou la s mantique de mini-langages.a.

terme -.nombre -.2. e Nous avons choisi dans cet exemple de g n rer un calculateur.2.terme -------------------------------.nombre -. .nombre -.1 Introduction 3.fact ------------ Pour r aliser le calculateur. nous avons besoin d'un "Parser" pour les expressions.expr -------------------------------------------------. et peuvent ^tre d crites e e e e par la grammaire : expr ---terme expr + terme expr .expr -. e e Les expressions arithm tiques avec les op rateurs +. terme pour terme et fact pour fact.fact -.-. e On crit une fonction pour chaque l ment non terminal de la grammaire expr pour e ee expr.2 Sp ci cations e terme ---- fact ---- Nous pouvons alors crire des expressions du type 1 + 2  3 qui seront analys es de e e la faon suivante : c 1 + 2 * 3 -.terme fact terme * fact terme fact nombre  expr  3.terme -----.fact -.

$f return e else printf"erreur : on attend un numero ou  en s n".e +terme function expr e  terme | terme e = terme while $f == "+" || $f == "-" e = $f++ == "+" ? e + terme : e . ? 0-9 *| .$f return 0 .3 Programme BEGIN print " tProgramme de la calculatrice" print " tLaissez un blanc entre les operateurs et les operandes.terme return e function terme e  fact | fact e = fact while $f == "*" || $f == " " || $f == "^" if $f++ == "*" e = e * fact else if $f-1 == " " e = e fact else e = e ^ fact return e * ^ fact function fact e  chiffre | expr if $f ~ ^ +.8g n". n" print " tPour QUITTER -----------------------. 0-9 +$  return $f++ else if $f == "" f++ e = expr if $f++ != "" print"erreur : on atendt  en s n".102 CHAPTER 3.? 0-9 + .CTRL C n" NF 0 f = 1 e = expr if f = NF printf"erreur en s n".2.$f else printf" t. APPLICATIONS 3.

3. DES MINI-LANGAGES 103 .2.

3 structure d'un programme AWK : : : : : : : : : : : : : : : : : 1.2.3 la programmation par les actions : les tests et les boucles : : : 1.2 D buter avec AWK : les fonctions et les variables usuelles : : : : : : : e 1.4 les op rations AWK sur les chaines de caract.1 aucune d claration de variable et de type : : : : : : : : : : : : e 1.1.2.4 quelques exemples : : : : : : : : : : : : : : : : : : : : : : : : 1.Contents 1 Les principes essentiels de AWK 1.1 structure d'un chier de donn es : : : : : : : : : : : : : : : : e 1.1.1 Introduction et d nitions : : : : : : : : : : : : : : : : : : : : : : : : e 1.1.1.2.2 ex cution d'un programme AWK : : : : : : : : : : : : : : : : e 1.2.2 la s lection par les Patterns : le "Matching" : : : : : : : : : e 1.

1 Les patterns : : : : : : : : : : : : : : : : : : : : : : 2.5 les tableaux .2.2.1.8 les sorties et les int ractions avec d'autres programmes : la e fonction "system" : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 10 10 12 14 15 16 16 16 19 20 23 24 26 27 7 2 Le langage AWK en d tail e 2.1.3 Les patterns sp ci ques aux chaines : : : : : e 2.res : : : : : : : : e e 1.6 cr er une fonction par "function" : : : : : : : : : : : : : : : e 1.1.4 Les expressions r guli.1 BEGIN et END : : : : : : : : : : : : : : : : 2.1.7 les entr es : la fonction "getline " : : : : : : : : : : : : : : : e 1.la notion de tableaux associatifs : : : : : : : : : 1.2.2.2 Les expressions : : : : : : : : : : : : : : : : 2.

4 Les entr es : : : : : : : : : : : : : : : : : : e 2.2 Les actions : : : : : : : : : : : : : : : : : : : : : : : 2.3 Les sorties : : : : : : : : : : : : : : : : : : : 2.1 Les Expressions : : : : : : : : : : : : : : : : 2.1.2.2 Cr er une Fonction : : : : : : : : : : : : : : e 2.2.2.6 Les intervalles : : : : : : : : : : : : : : : : : 2.2.5 Les Int ractions avec les autres programmes e 104 31 34 35 36 37 39 45 45 46 47 68 70 75 82 .5 Les compos s de patterns : : : : : : : : : : e 2.2.res : : : : : : : : : : : e e 2.1.

1.1.2.3 Le chier de donn es e 3.2.CONTENTS 105 : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 3 Applications 3.1.1 Base de donn es : : : : : : : e 3.2 Sp ci cations : : : : e 3.1 Introduction : : : : : 3.1 Introduction : : : : : 3.2.1.4 Programme : : : : : 3.2 Des mini-langages : : : : : : 3.3 Programme : : : : : 90 90 90 91 94 101 101 101 102 87 .2 Sp ci cations : : : : e 3.

You're Reading a Free Preview

Download
scribd
/*********** DO NOT ALTER ANYTHING BELOW THIS LINE ! ************/ var s_code=s.t();if(s_code)document.write(s_code)//-->