L’outil awkDEA Chimie Informatique Th´eorique24 mars 2004Le programme awk permet d’effectuer des transformations sur un fichierenraisonnantsurles champs deslignes.Les champs sontlespartiesdeligness´epar´ees par des espaces. Il est souvent utilis´e en conjonction avec sed : sedcr´ee les champs en rempla¸cant les s´eparateurs d’un fichier en entr´ee par desespaces, et awk agit en fonction de ces champs.1 Syntaxe et actions1.1 Appel du programmeLa syntaxe g´en´erique de l’utilisation de awk est :awk programme fichierSi le fichier n’est pas pr´esent, awk agit sur les lignes de son entr´ee standard.Comme pour sed, il est possible de sauvegarder un programme dans unfichier fic prog, et de l’utiliser avec la commande :awk -f fic prog fichier1.2 Format d’un programme1Un programme pour awk est une suite de commandes sch´ema -action :sch´ema { action }Ilestaussipossibleded´efinirdesfonctions,maiscelan’estpasn´ecessairepour de petits programmes tels que nous en verrons dans la suite du courset les TDs.1patternI´ ´ ´Universite Henri Poincare – annee 2003-2004 II1.3 Sch´emas possibles1.3.1 GrammaireUnecommande sch´ema-actionde awkpeut ne pasavoir de sch´ema. Danscecas,elleestappliqu´eesurtoutesleslignes.Lessch´emassontd´efinissuivantla grammaire suivante :sch´ema ::= BEGINEND/expression r´eguli`ere/expression arithm´etiquesch´ema ||sch´emasch´ema &&sch´emasch´ema ?sch´ema :sch´ema(sch´ema)sch´ema,sch´ema1.3.2 S´emantiqueLors de l’analyse, une commande ...
L’outilawk DEAChimieInformatiqueTh´eorique 24 mars 2004
Le programmeawkpermet d’effectuer des transformations sur un fichier en raisonnant sur leschampsdes lignes. Leschampssont les parties de lignes se´par´eespardesespaces.Ilestsouventutilis´eenconjonctionavecsed:sed cr´eeleschampsenrempla¸cantless´eparateursd’unfichierenentr´eepardes espaces, etawkagit en fonction de ces champs.
1 Syntaxeet actions 1.1 Appeldu programme Lasyntaxege´ne´riquedel’utilisationdeawkest : awkprogramme fichier Silefichiern’estpaspr´esent,awkagandarede.stntr´soneseedilnglrsetius Comme poursed, il est possible de sauvegarder un programme dans un fichierfic prog, et de l’utiliser avec la commande : awk-ffic prog fichier
1.2 Formatd’un programme 1 Un programme pourawkest une suite de commandesaemh´sc-action : sche´ma{action} Ilestaussipossibledede´finirdesfonctions,maiscelan’estpasn´ecessaire pour de petits programmes tels que nous en verrons dans la suite du cours et les TDs. 1 pattern
I
Universit´eHenriPoincar´e–anne´e2003-2004
II
1.3Sche´maspossibles 1.3.1 Grammaire Une commandeame´hcs-action deawk.Dmasanesrd´echtneupoiavasep cecas,elleestappliqu´eesurtoutesleslignes.Lessche´massontde´finissuivant la grammaire suivante : sch´ema::=BEGIN END /erpexsserrnoiuge´e`il/ expressionarithm´etique sch´ema||sch´ema sch´ema&&e´hcsam sche´ma?emh´sca:aemh´sc (´hmecsa) sch´ema,h´emsca
1.3.2S´emantique Lors de l’analyse, une commandetiaca-emh´scnoe-i,etseulsee´tuce´xetse mentsi,lesche´maestvrai.Nousreprenonslagrammairepourexpliquer quandunsch´emaestvrai. –BEGINcsec:tseame´hd´auaivrprduutebgoarmm,evanaqteules lignescommencent`aeˆtrelues.L’actioncorrespondanteestenge´n´eral utilise´epourinitialiserdesvariables; –ENDs:mye´hcamntmees,ltr´eueiqENDtseiarvrelefichieapr`esqu enentre´esoittermine´; – /gu´enriore`elisserpxeesilqu´enecoaligitno’lcappilseat/:eitnnutne suitedecaract`erescorrespondanta`l’expressionr´eguli`ere; –´leenneexpressionboo:’lcaitnoeeennpxe’sserbnoi´looteesecx´´eutiles est vraie au moment de l’analyse de la ligne; –am´echs||´hcsameesdeuxscesil’und´xcetue´itnoseetca’l:tme´hsesa vrai ; –s´echma&&h´scaemuxscesdeesilut´e´xceseetitno’lca:tnossame´h vrais ; –ma´echs?ma´echs:chsma´e: (if..then..else..remiersch´emaests)peli vrai,l’actionestex´ecut´eesilesecondl’estaussi.Sinon,l’actionest exe´cut´eesiletroisie`mesch´emaestvrai; – (chsma´e;iarvtseamnoseet´x:)’lcaitilesch´eecut´ees –e´hcsma,ma´echsnelio`uugnect’a:l´teee´uctsxeoienmentdumortir`apa v´erifielepremiersche´ma,etjusqu’a`cequ’ontrouveunelignev´erifiant
Le langage de programmation deawkestextrˆememeoctnelpmte,tli estvivementconseill´ed’allerregardersurlapagedemanueltoutesles possibilit´es(lancementd’unautreprocessus,pipe, utilisation d’expressions re´gulie`res,...).Ilyaaussiunlivrecompletconsacre´`al’utilisationenconjonc-tion deawketsed. Si une commande-acaitnoscemh´giridertee´’npasa’daction,lalignees ` verslasortied`esquelesche´maestvraie.Aladiff´erencedesed, si aucune commandecaitme-acs´honne s’applique sur une ligne, la ligne n’est pas re-dirig´eeverslasortiestandard.Nousneverronsquelesdeuxcommandes printetprintf, sur des exemples.
2 Exemplesd’utilisation ´ 1. Ecrireles lignes contenant le motifun. awk ’/un/{print}’ fichier ´ 2.Ecrireleslignesdeplusde7caracte`res. awk ’length>7{print}’ fichier ´ 3. Ecrireles deux premiers champs en sens inverse. awk ’ NF>=2 print $2,$1’ fichier note : pour la fonctionprintefialgiintae´occnondenatideux,lesacsp’e chaˆınesdecaracte`res,etlavirgulelase´parationparunespace... 4....en´ecrivantlerestedelaligne. awk ’ NF>; for(i=3;i¡=NF ;i++)=2 printf(”%s %s”, $2,$1) printf(”%s” ,$i);’ fichier Leprobl`emeiciestquelafonctionprint`alalignpasse-iaetumota quement,d’ou`l’utilisationdeprintfxconmieuetdepermiuq,elrrtoˆ la sortie. 5. Impressiondes lignes entre unceciet unque(comprises).