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
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) }'
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)
Voir aussi
- autre tuto en français sur malekal.com, plus complet sur les options (OFS par exemple)