====== awk/gawk (GNU awk) ======
La commande en ligne [[wpfr>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 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)
===== Voir aussi =====
* [[wpfr>awk|page wikipédia fr, bien écrite]]
* [[https://blog.stephane-robert.info/docs/admin-serveurs/linux/awk/|très bon tuto de Stéphane Robert]]
* [[https://www.malekal.com/comment-utiliser-la-commande-awk-avec-des-exemples/|autre tuto en français sur malekal.com]], plus complet sur les options (OFS par exemple)