awk

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

Les commentaires sont fermés.

Suivre

Get every new post delivered to your Inbox.