| Prochaine révision | Révision précédente |
| utilisateurs:bcag2:awk [Le 28/10/2025, 11:51] – créée bcag2 | utilisateurs:bcag2:awk [Le 16/03/2026, 15:23] (Version actuelle) – [awk/gawk (GNU awk)] bcag2 |
|---|
| ====== awk ====== | ====== 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…\\ | La commande en ligne liée au langage [[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 | Elle est bien plus simple qu’il n’y paraît au premier coup d’œil |
| |
| ls -la | awk '{ printf ("%s -> %d\n", $9, $5) }' | ls -la | awk '{ printf ("%s -> %d\n", $9, $5) }' |
| </code> | </code> |
| <note tip>//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</note> | <note tip>//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</note> |
| | <note important>ne pas confondre **//print//** -> //print($2, $5, $7)// et **//printf//** largement utilisé dans cette page</note> |
| |
| 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 : | 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 : |
| /etc/passwd | /etc/passwd |
| </code> | </code> |
| L’exemple ci-dessus va parcourir chaque ligne du fichier ///etc/passwd//, appliquer comme séparateur **//://** et si la valeur 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) | 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 ===== | ===== Voir aussi ===== |
| * [[https://blog.stephane-robert.info/docs/admin-serveurs/linux/awk/|très bon tuto de Stéphane Robert]] | * [[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) | * [[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) |
| | * [[https://www.gnu.org/software/gawk/manual/gawk.html|Doc gawk sur GNU]] |