Awk

De Justine's wiki
Aller à la navigation Aller à la recherche

Présentation : fonctionnement global

Awk suit une logique simple : Lis, execute, répète.

Structure d'un programme

Nous avons trois blocs : BEGIN, le corps, et END.

Les mots-clefs sont en majuscules.

BEGIN

BEGIN {awk-commands}

Ce bloc est optionnel et ne s'éxecute qu'une seule fois, au démarrage. Il est optionnel.

BEGIN est un mot-clef.

Le corps

/pattern/ {awk-commands}

Ce bloc applique des commandes à chaque ligne, par défaut (à moins qu'on ne le restreigne avec des patterns).

END

END {awk-commands}

Même principe que le BEGIN, mais à la fin.

Premiers tests

Je pars du fichier suivant :

1)	Amit	 Physics	80
2)	Rahul	 Maths		90
3)	Shyam	 Biology	87
4)	Kedar	 English	85
5)	Hari	 History	89

Et avec un petit traitement par awk:

<syntaxhighlight lang='bash'> [justine@argonaut awk]$ awk 'BEGIN{printf Sr NotNametSubttMarksn} {print}' test Sr NoNameSubMarks 1)Amit Physics80 2)Rahul Maths90 3)Shyam Biology87 4)Kedar English85 5)Hari History89 </syntaxhighlight>

Au début, on affiche un header. Puis on affiche chaque ligne.

Quelques options

Utiliser un fichier de commandes

On peut envoyer des instructions depuis un fichier avec -f:

<syntaxhighlight lang='bash'> $ awk -f command.awk marks.txt </syntaxhighlight>

Variables

On peut assigner des variables avec -v :

<syntaxhighlight lang='bash'> $ awk -v name=Jerry 'BEGIN{printf Name = %sn, name}' Name = Jerry </syntaxhighlight>

Voir les variables globales

L'option --dump-variables[=file] dumpe un fichier de variables globales, par défaut awkvars.out.

lint

L'option --lint permet d'avoir un linter.