awk/gawk (GNU awk)

La commande en ligne liée au langage 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

Utilisation

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 de façon similaire aux commandes équivalentes des langages 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
ne pas confondre printprint($2, $5, $7) et printf largement utilisé dans cette page

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 !! ≠ de $NF : dernier champ de 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)

Voir aussi