awk

AWK : Aho, Kernighan and Weinberger

Call

awk -f file.awk
echo -e "a\nb\nc" | awk '{print}' // affiche a, b et c

Section

Le script est séparé en trois blocs:

[optionnel] BEGIN {}
Bloc début. Appelé une seule fois au début du script
[optionnel] {}
Bloc répétition (record). Appelé sur chaque record (généralement chaque ligne) d'entrée (STDIN)
[optionnel] END {}
Bloc fin. Appelé une seule fois à la fin du script.

Les blocs peuvent être déclaré en désordre et sera exécuté en ordre. On préfère généralement utiliser l'ordre suivant: BEGIN {} { } END { }

File

Extension: .awk

Shebang: #!/usr/bin/awk -f

chmod +x file.awk (pour pouvoir l'exécuter avec ./file.awk)

Commentaire: dièse '#'

Séparateur d'instruction: point-virgule ';'

Variable

RS : séparateur d'enregistrements (Record Separator), par défaut "\n"

FS : séparateur de champs (Field Separator), par défaut " "

NR : Numéro de l'enregistrement (Record) en cours (0 dans le bloc BEGIN, 1..n dans le bloc répétition.

NF : Nombre total de champs (Field) pour chaque enregistrement (Record) dans le bloc répétition.

I/O

Variable dans le bloc répétition (pour chaque Record),

  • $0 : le record entier (sans le séparateur RS)
  • $1...$NF : chaque champ séparé par le séparateur FS (sans le séparateur FS)
  • $NF : dernier champ séparé par le séparateur FS

Command Output

print : affiche par défaut $0, sinon affiche tous les arguments.

{
 print; // affiche $0, l'enregistrement en cours
 print $1; // affiche $1, le premier champ (field) de l'enregistrement en cours
 print NF; // affiche la variable NF
 print $1 ":" $2;  // affiche le premier champ, suivi de deux-points, suivi du deuxième champ.
}

Tableau

La clé est une chaîne de caractères. La clé numérique 1 représente la chaîne "1". a[1] est le même que a["1"]

La valeur peut être un nombre ou une chaîne de caractères.

nomtableau["cle"] = "valeur1"
nomtableau["cle2"] = "valeur1"
nomtableau["cle3"] = 3
nomtableau[10] = 2

Accès par nomtableau["cle"] ou nomtableau[VARIABLE]

Test d'existante d'une clé: "cle" in nomtableau (retourne 0 ou 1)

Suppression d'une clé: delete nomtableau["cle"]

Boucle: for (var in nomtableau) print var;

Tableau à plusieurs dimensions: simulé avec SUBSEP.

Exemple d'un programme awk

#!/usr/bin/awk -f
# USAGE
#
# echo "Samedi 20 octobre 2012" | ./test.awk
#
#
BEGIN {
month["octobre"] = 10
month["novembre"] = 11
month["décembre"] = 12
}
{
# affiche 20/10/2012
print $2 "/" month[$3] "/" $4;
}