Ceci est une ancienne révision du document !
Table des matières
Awk
Awk comparé aux outils Unix et Python Magazine Marque GNU/Linux Magazine n° Numéro 273 Mois de parution janvier 2025 Auteurs Par Blondon Stéphane
Résumé
Vous connaissez probablement déjà les outils classiques installés sur toutes les distributions GNU/Linux, et Python, langage populaire aujourd’hui. Découvrez Awk, un (vieux) langage qui pourrait vous servir lorsque les premiers sont trop limités et qu’un script Python vous semble surdimensionné.
Un script shell permet de réaliser des traitements basiques sur des lignes de texte grâce à un ensemble d'outils Unix (cut, grep, sort, wc, tr…). Cependant, lorsque les traitements deviennent plus complexes, un script shell avoue ses limites : faire des calculs est laborieux, le code est généralement peu structuré, etc. Dans ce cas, un script dans un langage plus évolué (comme Python) sera plus adapté. Cet article présente une solution intermédiaire : Awk, un langage créé par Alfred Aho, Peter Weinberger et Brian Kernighan. La version initiale date de 1977, révisée dans les années 80. Bien que toujours disponible, son heure de gloire semble passée. Il est spécialisé dans le traitement de lignes et leur transformation, ce qui le rapproche du comportement des enchaînements de filtres dans un terminal.
L'article présente Awk, en le comparant aux outils Unix classiques et à du code Python.
1. Disponibilité
En général, plusieurs interpréteurs Awk sont disponibles dans une distribution GNU/Linux (souvent gawk et mawk) et il est bien possible qu'il soit déjà installé. Tapez juste awk dans un terminal pour vérifier.
Par exemple, si mawk est installé, le début de la sortie sera :
- ex001.txt
$ awk Usage: mawk [Options] [Program] [file ...] Program: The -f option value is the name of a file containing program text. [...]
Dans le cas contraire, vous pouvez en installer un depuis les paquets de votre distribution. Ils sont nommés mawk ou gawk sous Debian et Arch Linux (mawk est dans les dépôts AUR). D'autres interpréteurs plus récents existent (nawk, goawk).
2. Utilisation
Awk a été conçu pour l'écriture de one-liners, mais il est aussi possible d'écrire un programme Awk pour l'exécuter.
L'usage en tant que one-liner est :
$ awk ‘le_programme’ les_fichiers_à_traiter
L'usage avec un programme Awk écrit dans un fichier est :
$ awk -f programme.awk les_fichiers_à_traiter
Ceci est un comportement classique du shell et n’est donc pas une spécificité liée à Awk.
Pour la suite de l’article, nous allons utiliser un fichier nommé distribs.txt contenant les données suivantes :
Raspbian linux 2012 Archlinux linux 2002 Debian linux 1993 FreeBSD bsd 1993 pfSense bsd 2004
2.1 Imiter cat
Par exemple, pour faire l'équivalent de cat distribs.txt :
$ awk '{print $0}' distribs.txt
Comme le montre la figure 1, $0 représente l'enregistrement total (qu'on peut assimiler ici à la ligne). $1, le contenu du premier champ, $2 le contenu du deuxième champ, etc. Le contenu du dernier champ est $NF.NF signifie Number of Fields. On peut donc obtenir astucieusement le contenu de l'avant-dernier champ avec $(NF-1).
awk compare fig 01-s Fig. 1 : Représentation des données accessibles d’un enregistrement.
