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