Cette commande permet de créer des programmes structurés sous forme de scripts qui seront interprétés par le shell.
On parle de langage awk et on reconnaît les fichiers script par leur extension .awk
Très souvent utilisé comme filtre pour faire des extractions formatées de fichiers et des recherches de motifs.
Il est bien adapté pour faire des manipulations, des comparaisons ou pour réorganiser des données
qui passent d'un système à l'autre.
Il est aussi souvent utilisé pour vider les pages des commentaires du code c, perl, html ou autres remarques ou balises.
Avec cette commande, on peut travailler en mode ligne de commande ou en script. Les fichiers contenant les scripts ont alors pour extension .awk
Plusieurs variantes pour le programme lui même :
Et pour consulter l'aide :
Pour travailler sur la ligne de commande on va avoir :
awk -options ' motif {actions} ' nom_du fichier
Un rappel de options :
Options POSIX : Options longues GNU : -f fichier_prog --file=fichier_prog -F fs --field-separator=fs -v var=valeur --assign=var=valeur -m[fr] valeur -O --optimize -W compat --compat -W copyleft --copyleft -W copyright --copyright -W dump-variables[=fichier] --dump-variables[=fichier] -W exec=fichier --exec=fichier -W gen-po --gen-po -W help --help -W lint[=fatal] --lint[=fatal] -W lint-old --lint-old -W non-decimal-data --non-decimal-data -W profile[=fichier] --profile[=fichier] -W posix --posix -W re-interval --re-interval -W source='programme' --source='programme' -W traditional --traditional -W usage --usage -W use-lc-numeric --use-lc-numeric -W version --version
Structure d'une commande awk
awk -options ' BEGIN { entête, définition des var } { traitement } END { mot de la fin ou résultat } '
Recherche dans le fichier 'messier.txt' les lignes contenant le mot 'M101' et afficher l'ensemble de la ligne grâce à $0.
On donne le séparateur avec -F" ", pour l'espace.
On donne le motif $1=="M101", pour que 1er champ trouvé soit égal à la chaîne "M101"
On imprime $0, c'est à dire toute la ligne
Et pour finir on nonne le fichier à traiter, soit 'messier.txt'
$ awk -F" " '$1=="M101" {print $0}' messier.txt M101 Pinwheel Galaxy Spiral Galaxy Ursa Major 5457 8.5 22 14h 3.3m 54 22 Early Spring 44 C $
En dessus, voilà le résultat de notre demnade et ci-dessous une autre méthode pour chercher notre galaxie ...
Recherche la chaînes 'M101' et imprime la ligne complète.
$ awk '/M101/ {print $0}' messier.txt
Voici une autre demande avec en entête un titre, puis l'impression des champs $1,$2,$4 du fichier 'radio'
$ awk -F, 'BEGIN {print "LISTE "}; {print $1,$3,$4}' radio
En ligne, on travail souvent avec différents outils que l'on associe via le Pipe (barre verticale |).
Dans le cas suivant on affiche le catalogue messier.txt, mais seulement les champs 1,2,3,4,5 et qui comportent
le mot "Ourse" sans compter sur la "case" majuscule ou minuscule ...
$ cat brillantes.txt | awk -F" " '{print $1,$2,$3,$4,$5}'|grep -i "ourse" Grande Ourse Alpha Dubhe 1.8 Grande Ourse Beta Merak 2.4 Grande Ourse Epsilon Alioth 1.8 Grande Ourse Gamma Phecda 2.4 Grande Ourse Eta Alkaid 1.9 Petite Ourse Alpha Polaris 2 Petite Ourse Beta Kochab 2.1 $
Avec un peu d'habitude, on arrive rapidement à faire ce que l'on veut des fichiers mis à disposition.
Comme dit plus haut, les fichiers scripts ont pour extension ".awk" Ils seront édités en par le terminal avec vim, nano et autre joe (mon préféré) ou gedit.
Sur la ligne de commande on lance donc soit un script qui fait appel à une commande awk ou directement une commande complète en ligne qui peut aussi faire appel à un script, si les commandes sont nombreuses et le lancement régulier (souvent).
.. $./go.sh ... ... $ awk -f script -v var1 fichier.csv ... ...
Format d'un programme awk
#!/bin/bash/awk -f # Format du programme test.awk # JPP BEGIN { print "Lancement du programme" } # zone du traitement { print "Ce message s'affiche autant de fois qu'il y a de ligne dans le fichier essais.csv END { print "Fin du travail" }
Ce programme sera par exemple appelé avec la commande en ligne suivante:
$awk -f test.awk essai.csv
De nombreuses options et la possibilité d'utiliser des fichiers scripts donnent une puissance énorme à cette commande.
Ne pas oublier de consulter le "man awk" ou awk --help. On trouve d'excellentes documentations et de nombreux
exemples sur le Web. C'est vraiment un outil formidable et hyper efficace ...