Quelques exemples très simples
Dans les exemples suivants il n'y a qu'un enchaînement de type motif { action } , et le seul motif
utilisé est dans le dernier exemple qui est le motif END. Donc dans les exemples toutes les actions
seront appliquées à tous les enregistrements du fichier en entrée
awk '{print $NF}' fichier : affiche le dernier champ de chaque ligne du fichier (quand il n'y a
pas de motif particulier, l'action est faite pour tous les enregistrements)
who | awk '{print $1,$3}' : affiche le login et la date de connexion
awk 'END {print NR}' fichier : affiche le nombre total de lignes du fichier (affiche en fait à la
fin le nombre total d'enregistrements lus une fois, et non pour chaque enregistrement)
awk -F ":" '{ $2 = "" ; print $0 }' /etc/passwd : affiche chaque ligne du fichier
/etc/passwd après avoir effacé le deuxième champ (mis le deuxième champ à vide)
Exercice 1
Vous testerez dans cet exercice quelques lignes de commande utilisant la commande awk, en
utilisant comme fichier d'entrée le fichier ''timings_SPIR_CUDA_2500_194.txt'' se trouvant dans
l'archive à récupérer sur le site de l'enseignant, répertoire que vous recopierez sur votre compte.
1. Ecrire une ligne de commande qui fait la même chose que le 3e exemple (afficher le nombre
de total de lignes du fichier) mais avec d'autres variables.
2. Quelle différence alors entre NR et FNR ? Pour voir cette différence refaites une commande
qui affiche les 2 valeurs ligne après ligne, en donnant 2 fichiers à lire et non 1. Prenez un
autre fichier dans le répertoire AWK.
3. Ecrire une ligne de commande qui affiche pour chaque ligne (ou enregistrement) son
numéro, son nombre de champs, et enfin la valeur de son dernier champ.
Syntaxe du motif
Si le motif existe dans l'enregistrement, l'action sera appliquée à la ligne.
Le motif peut être :
•une expression régulière simple ou composée comme ci-après :
•/exp reg/ où ''exp reg'' est une simple expression régulière et dès qu'une ligne
contient une telle expression on lui applique l'action qui suit
•$0 ~ /exp reg/ : la ligne est une expression régulière de la forme '' exp reg''
•expression ~ /exp reg/ : la ligne contient une ''expression'' qui est de la
forme '' exp reg''
•expression !~ /exp reg/ : la ligne contient une ''expression'' qui n'est pas de
la forme '' exp reg''
•une expression BEGIN ou END
•une expression de comparaison: <, <=, == , !=, >=, >
•une combinaison des trois (à l'aide des opérateurs booléens || ou, && et, ! négation)
•une caractérisation des lignes
motif1,motif2 : chaque ligne entre la première ligne correspondant au motif1 et la première
ligne correspondant au motif2
Exemples :
•Exemple 0
awk 'length($0)>75 {print}' fichier : affiche les lignes de plus de 75 caractères (chaque
enregistrement teste si sa ligne contient plus de 75 caractères et si oui alors exécute l'action qui est
d'afficher la ligne ($0)). ''print'' équivaut à ''print $0''.