La Commande awk
* Véritable langage de programmation
$ awk [-Fc] [-f prog | listeCmd] [fichier]*
c : le séparateur de champs (espace, tab)
prog : le programme, constitué de séquences
pattern $\{$ action$\}$ encloses dans des ‘ ‘
Pas de pattern : action effectuée sur chaque ligne
Pas d’action : équivalent grep
‘length > 70′
‘$\{$ print $2, $1 $\}$’
‘$\{$ s += $1 $\}$ $\backslash$
END $\{$ print “somme : “, s $\}$’
‘$\{$ for (i = NF; i>0; -i) print $i $\}$’
Les Patterns
logiques entre champs et expressions constantes ou variables :
$1 == ““
# le premier champ est vide
$1 $\sim$ /$^{\wedge}$$/
# idem
$2 !$\sim$ /a/
# le second champ ne contient aucun ‘a’
NR < 30
# le n$\infty$ de ligne est < 30
NF % 2 == 0
# le nombre de champs est pair
BEGIN
# action exécutée AVANT le début de lecture
END
# action exécutée APRES la fin de lecture
Exemple :
awk -F: ‘$2 !$\sim$ /./ $\{$ print $1 $\}$’ /etc/passwd
Les Actions
* La puissance de awk vient aussi de ce qu’il est capable d’effectuer des opérations complexes sur les données traitées :
$\{$ sum += $1 $\}$
END $\{$ printf “sum : %d, average : %f $\backslash$n“, $\backslash$ sum, sum/NR $\}$
* On peut utiliser, dans les parties “action“, des structures de contrôle : if, for, while. Syntaxe identique C
awk et les Tableaux
Les tableaux sont très puissants car
- ils sont dynamiques (croissent automatiquement)
- ils sont indiÁables sur n’importe quelle information, même non entière
$ cat data
pomme 3
poire 10
pomme 12
banane 6
…
$ awk ‘$\{$ tab[$1] += $2$\}$ $\backslash$
>END $\{$ for (f in tab) print f,tab[f] $\}$’ data
banane 6
pomme 15
…