cClaude.rocks ☕ Le blog

L'informatique et les nouvelles technologies

Menu

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 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 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 echo

Références

ᦿ


ℹ 2006 - 2020 | 🕸 Retour à l'accueil du domaine | 🏡 Retour à l'accueil du blog