Introduction à l’utilitaire awk
Utilité L’utilitaire awk recherche un ou plusieurs patterns dans un ou plusieurs fichiers et applique certaines actions sur les enregistrements sélectionnés. Synopsis awk [-Fc] –f program-file [file-list] awk program [file-list] Fichier contenant le programme awk à appliquer Délimiteur de champ spécifique Fichier(s) à traiter Programme awk à même la ligne de commande Note: délimiteurs par défaut: SPACE TAB et
Aperçu du fonctionnement pattern { action } programme awk i n fichier à traiter k n for (k = 0; k < n; k++) for (i = 0; i < n; i++) if (k.match(i.pattern)) i.action;
Patterns Expressions régulières, /regex/, avec ou sans opérateurs ~ (=) et !~ (!=) exemples: /tion/ enregistrements contenant la chaîne tion $1 ~ /tion/ enregistrements dont le 1er champ contient tion $3 !~ /tion/ enregistrements dont le 3e champ ne contient pas la chaîne tion
Patterns (suite) Opérateurs relationnels (fonctionnent sur les nombres ainsi que sur les lettres): <, <=, ==, !=, >= et > exemples: $1 > $2 enregistrements où la valeur 1er champ est supérieure à celle du 2e “$4” == “alpha” enregistrements dont le 4e champ est alpha
Patterns (suite) Opérateurs booléens: || (ou) et && (et) exemple: $3 >= 10 && $3 < 20 enregistrements où la valeur 3e champ est supérieure ou égale à 10 et inférieure à 20 Intervalles (spécifiés avec une virgule) /début/,/fin/ enregistrements inclus entre les bornes /début/ et /fin/. Les bornes sont incluses dans l’intervalle. Le traitement de l’intervalle est récurrent.
Patterns (suite) Identificateurs uniques: BEGIN et END exemple: l’identificateur BEGIN permet d’effectuer une action avant de commencer le traitement des fichiers. l’identificateur END permet d’effectuer une action après que le traitement des fichiers soit complété. exemple: BEGIN { print “Début du traitement” } affiche la chaîne “Début du traitement” sur la sortie standard au lancement du programme, avant de commencer le traitement du/des fichier(s)
Actions Action par défaut: print print affiche sur la sortie standard. il est possible de rediriger la sortie avec >, >> et |. Il est possible de spécifier plusieurs actions sur une même ligne avec ; : pattern { action; action; action; } Les actions peuvent être composées d’opérations logiques et arithmétiques, de fonctions, de variables, de tableaux associatifs, de structures itératives et de structures conditionnelles.
Actions (suite) exemple: $cat total.awk BEGIN { total = 0; dix = 0 } END { printf "Total: %d, Dix: %d\n",\ total, dix } $awk –f total.awk nombres.txt Total: 98, Dix: 2 $
Actions (suite) exemple: $cat pgvp.awk BEGIN { pgv = -1 } $1 > pgv { pgv = $1 } END { if (pgv == -1) { printf "Valeurs negatives\n" } else printf "Plus grande valeur: %d\n",\ pgv $awk –f pgvp.awk nombres.txt Plus grande valeur: 23 $
Commentaires Tout ce qui suit le symbole # sur une ligne est considéré comme un commentaire exemple: $cat commentaires.awk BEGIN { pgv = -1 # initialisation } $1 > pgv { # si 1er champ > valeur sauvegardee, # 1er champ devient valeur a battre pgv = $1 } END { printf "Plus grande valeur: %d\n",\ pgv } $awk –f pgvp.awk nombres.txt Plus grande valeur: 23 $
Variables NR $0 NF $1 à $n FS OFS RS ORS FILENAME numéro de l’enregistrement courrant enregistrement courrant nombre de champs dans l’enregistrement courrant les champs délimiteur de champs en entrée par défaut: et délimiteur de champs en sortie par défaut: délimiteur d’enregistrement en entrée délimiteur d’enregistrement en sortie nom du fichier en traitement NEWLINE SPACE TAB
Fonctions length(str) int(num) index(str1,str2) retourne la longueur de la chaîne de caractères str si str n’est pas spécifié, retourne la longueur de l’enregistrement courrant int(num) retourne la portion entière de num index(str1,str2) retourne la position de str2 dans str1 ou 0 si str1 ne contient pas la chaîne str2
Fonctions (suite) split(str,arr,del) sprintf(fmt,args) construit un tableau de jetons (arr) où chacun de ces derniers est un champ de la chaîne str découpé à l’aide du délimiteur del retourne la taille du tableau créé sprintf(fmt,args) retourne la chaîne args formatée d’après le format fmt (fonctionne comme la fonction C du même nom) substr(str,pos,len) retourne une chaîne de caractères tirées de str à partir de la position pos et de longueur len
Opérateurs arithmétiques Tous les opérateurs suivants sont supportés: *, /, %, +, -, =, ++, --, +=, -=, *=, /= et %=.
Tableaux associatifs Un tableau associatif utilise des chaînes de caractères (appelées clés) comme indices: array[string] = value Une construction particulière de boucle facilite le parcours des tableaux associatifs: for (elem in array) action Note: il est également possible de simuler un tableau traditionnel en utilisant des chaînes de caractères numériques…
La fonction printf Fonctionnement similaire à celui du langage C: printf “control-string” arg1, arg2, …, argn La chaîne de formatage (control-string) des spécifications de conversion ayant la forme suivante: %[-][x[.y]]conv - x .y conv justification à gauche largeur minimale du champ affiché nombre de décimales, s’il y a lieu type du paramètre
La fonction printf (suite) Les types de paramètres supportés (conv) sont: d nombre entier e notation exponentielle f nombre à point flottant g utiliser le plus court entre e ou f o octal s chaîne de caractères x hexadécimal dans la chaîne de formatage: utiliser \n pour un changement de ligne ( ) utiliser \t pour introduire une tabulation ( ) NEWLINE TAB
Exemples…