awk/gawk (GNU awk)

La commande en ligne awk est souvent utilisée pour extraire un ou plusieurs champs de données séparables, à commencer par les champs de fichiers CSV/TSV…
Elle est bien plus simple qu’il n’y paraît au premier coup d’œil

Exemple pour afficher les noms de fichiers et la taille en octets des fichiers du répertoire courant :

ls -la | awk '{ printf ("%s -> %d\n", $9, $5) }'
printf fonctionne comme de façon similaire au commande équivalent du langage python et C.
Ci-dessus, le %s (string/chaîne de caractère) est remplacé par $9, càd le nom du fichier, et %d (digital/valeur numérique) est remplacé par $5, la taille du fichier en octets

et en compliquant un peu, la même chose sur un répertoire de photos JPG pour lister la taille de celle de plus de 1Mo :

ls -la *.JPG | awk '{ if ($5 > 1000000) printf ("%s -> %d\n", $9, $5) }'

Variables de base

$0 la ligne entière
$1, $2, … les champs de la ligne (colonne 1, 2, etc.)
NF nombre de champs dans la ligne

Autre exemple pour lister les noms des utilisateurs et leurs identifiants sur votre OS préféré :

awk -F ":" '{ if ($3 >= 1000 && $3 < 10000) \
                   { printf("%s;%d\n", $1,$3) }}' \
     /etc/passwd

L’exemple ci-dessus va parcourir chaque ligne du fichier /etc/passwd, appliquer comme séparateur : (-F ":" ou –field-separator=":"), et si la valeur (numérique) du 3ème champ est supérieur ou égale à 1000 et inférieure à 10'000, retourner le champs 1 ($1) correspondant au nom utilisateur et le champ 3 ($3) correspondant à son UID (UserID - identifiant utilisateur)

  • utilisateurs/bcag2/awk.txt
  • Dernière modification: Le 28/10/2025, 12:09
  • par bcag2