awk est un langage de traitement de lignes, disponible sous la forme d'une commande portant le mĂȘme nom sur la plupart des systĂšmes. awk est principalement utilisĂ© pour la manipulation de fichiers textuels pour des opĂ©rations de recherches, de remplacement et de transformations complexes.
Cependant awk est souvent sous exploitĂ© et câest un de ces usages simpliste que je vous prĂ©sente ici, puisquâil sâagit simplement dâextraire la Ă©niĂšme colonne dâun flux.
La commande « awk »
La syntaxe générale d'awt est la suivante:
awk [POSIX or GNU style options] -f progfile [--] file âŠ
awk [POSIX or GNU style options] [--] 'program' file âŠ
par dĂ©faut awt lit lâentrĂ©e standard Ă©crit sur la sortie standard.
Nous utiliserons ici la seconde solution, qui permet de mettre le programme awt directement dans la ligne de commande.
Le programme sera exécuté pour chaque ligne du flux, il doit commencer par {
et finir }
et pour le problÚme que nous cherchons à résoudre il se limitera à la fonction print
et comme paramĂštre $
suivi du numéro du champ.
echo 'champ1 champ2 champ3' | awk '{print $2}'
A la différence de la commande cut
, avec awk il peut y avoir autant dâespace (caractĂšres blancs) pour sĂ©parer les champs.
echo -e 'ligne1champ1 ligne1champ2 ligne1champ3\nligne2champ1 ligne2champ2 ligne2champ3\nligne3champ1 ligne3champ2 ligne3champ3' | awk '{print $2}'
awt est souvent utilisée avec la commande xargs, en particulier pour supprimer massivement des fichiers. Je vous propose un exemple moins risqué et qui permet de bien comprendre le fonctionnement de xargs.
echo -e 'ligne1champ1 ligne1champ2 ligne1champ3\nligne2champ1 ligne2champ2 ligne2champ3\nligne3champ1 ligne3champ2 ligne3champ3' | awk '{print $2}' | xargs echo
La commande awk dans lâexemple ci-dessous, retourne :
ligne1champ2
ligne2champ2
ligne3champ2
La commande « xarg »
Pour les traitements vu ci-dessus, la commande xarg peut Ă©galement faire le travail.
La séquence xargs echo
récupérera toutes les valeurs en entrées et finalement exécutera le code suivant :
echo ligne1champ2 ligne2champ2 ligne3champ2
Pour vous aider Ă mettre au point vos scriptes le paramĂštre --verbose peut ĂȘtre ajoutĂ© Ă la commande xargs :
echo -e 'il Ă©tait une foisâŠ\nâŠune belle histoireâŠ\nâŠils divorcĂšrent, oubliant les enfantsâŠ' | xargs --verbose printf "-> %s â\n"
Qui affichera vers la sortie standard :
-> il <-
-> Ă©tait <-
-> une <-
-> fois⊠<-
-> âŠune <-
-> belle <-
-> histoire⊠<-
-> âŠils <-
-> divorcĂšrent, <-
-> oubliant <-
-> les <-
-> enfants⊠<-
Et vers la sortie dâerreur :
printf '-> %s <-\n' il Ă©tait une fois⊠âŠune belle histoire⊠âŠils divorcĂšrent, oubliant les enfantsâŠ
Références
- Page Wikipedia d'Awk
- Documentation d'Awk en français
኿