====== 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)