Commande awk Linux : syntaxe, exemples pratiques et cas d’usage

LINUX · SHELL · TRAITEMENT TEXTE

La commande awk Linux permet d’extraire, filtrer, reformater et calculer rapidement sur des données texte. Si tu manipules des logs, des fichiers délimités, des sorties shell ou des exports CSV, AWK reste un outil redoutablement efficace.

Commande awk Linux : syntaxe et exemples pratiques
💡

Réponse rapide

awk sert à lire un flux ligne par ligne, découper chaque ligne en champs, appliquer des conditions puis afficher un résultat formaté. C’est l’un des outils les plus utiles pour parser des logs, des fichiers /etc/passwd, des sorties de commandes et des exports CSV simples.

À quoi sert awk sous Linux

AWK est un langage de traitement de texte orienté lignes et champs. En pratique, tu l’utilises quand tu veux extraire une colonne, reformater une sortie, filtrer des lignes, compter, sommer ou produire un petit rapport sans écrire un script Python complet.

Sa force, c’est le rapport puissance / simplicité. Là où cut devient vite limité et où sed cible surtout des substitutions, awk te donne à la fois l’accès aux colonnes, aux conditions, aux boucles et aux variables internes. Pour de l’administration système, c’est souvent l’outil le plus rapide pour aller du besoin au résultat.

Quand awk est un bon choix

Choisis awk pour extraire des colonnes, filtrer sur des patterns, compter des occurrences, agréger des valeurs ou réécrire une sortie shell en quelques lignes.

Syntaxe de base

La forme la plus courante d’une commande AWK est la suivante :

awk 'pattern { action }' fichier

Tu peux aussi lui passer un flux via un pipe :

commande | awk '{ print $1 }'

Dans cette logique :

  • pattern décide quelles lignes sont concernées
  • action décrit ce qu’il faut faire
  • $1, $2, $3 représentent les champs de la ligne
  • $0 représente la ligne complète
  • NF représente le nombre de champs
  • NR représente le numéro de ligne

Exemple simple pour afficher uniquement le propriétaire et le nom de fichier dans un ls -l :

ls -l | awk '{ print $3, $9 }'

Travailler avec les champs et séparateurs

Par défaut, AWK découpe sur les espaces et tabulations successifs. C’est un point important : le séparateur par défaut n’est pas uniquement la tabulation. C’est pour ça qu’il fonctionne bien avec beaucoup de sorties shell.

Si tu veux définir un séparateur précis, utilise -F. Exemple avec /etc/passwd :

awk -F: '{ print $1, $3 }' /etc/passwd

Cette commande affiche le login et l’UID de chaque entrée. C’est plus propre que de bricoler plusieurs cut chaînés.

Tu peux aussi reformater complètement l’affichage :

awk -F: '{ print "username:" $1 " uid:" $3 }' /etc/passwd

Résultat : une sortie lisible, facilement exploitable dans un diagnostic ou un mini-report.

⚠️

Attention aux espaces

Sur des sorties irrégulières ou des fichiers CSV complexes avec guillemets, awk peut devenir fragile. Pour du CSV riche, un parseur dédié sera souvent plus sûr.

Variables utiles à connaître

  • $0 : ligne complète
  • $1 : premier champ
  • $2 : deuxième champ
  • NF : nombre de champs
  • NR : numéro de la ligne courante
  • FS : séparateur d’entrée
  • OFS : séparateur de sortie

Filtrer des lignes avec des conditions

AWK devient vraiment intéressant quand tu ajoutes des conditions. Tu peux filtrer sur l’égalité, les expressions régulières, des comparaisons numériques ou des combinaisons logiques.

Afficher uniquement la ligne de l’utilisateur postgres dans /etc/passwd :

awk -F: '$1 == "postgres" { print "username:" $1 " uid:" $3 }' /etc/passwd

Afficher plusieurs comptes ciblés :

awk -F: '$1 == "postgres" || $1 == "mysql" { print "username:" $1 " uid:" $3 }' /etc/passwd

Filtrer avec une regex :

awk -F: '$1 ~ /oo/ { print "username:" $1 " uid:" $3 }' /etc/passwd

Afficher les comptes dont le shell se termine par /bin/false :

awk -F: '$7 ~ /\/bin\/false$/ { print $1, $7 }' /etc/passwd

Le symbole ~ sert à tester une expression régulière. Le $ dans la regex signifie “fin de chaîne”.

Transformer l’affichage et les données

Tu n’es pas obligé d’afficher les données telles quelles. AWK est très pratique pour enrichir, nettoyer ou réécrire une sortie.

Exemple de substitution avec gsub :

ls -l | awk '{ gsub("babidi", "BOSS", $0); print $0 }'

Ici, toutes les occurrences de babidi dans la ligne sont remplacées par BOSS. Tu peux faire la même chose sur un champ spécifique au lieu de toute la ligne.

Tu peux aussi changer le séparateur de sortie :

awk -F: 'BEGIN { OFS=";" } { print $1, $3, $7 }' /etc/passwd

Pratique pour produire un export intermédiaire facilement réutilisable ailleurs.

💡

Bon réflexe

Quand la commande devient longue, passe-la dans un script AWK dédié ou aligne proprement tes blocs BEGIN, conditions et END. Tu éviteras les one-liners illisibles.

Faire des calculs et statistiques

AWK sait accumuler des valeurs très simplement. C’est parfait pour totaliser, compter ou produire une statistique rapide sur un fichier plat.

Sommer la première colonne d’un fichier :

awk '{ somme += $1 } END { print somme }' fichier.txt

Numéroter les lignes :

ls -l | awk '{ print "ligne", NR, $0 }'

Afficher le nombre de champs de chaque ligne :

ls -l | awk '{ print "nombre de champs", NF, $0 }'

Afficher chaque champ sur sa propre ligne :

awk '{ for (i=1; i<=NF; i++) print $i }' fichier.txt

Cette logique de boucle est très utile pour inspecter un format irrégulier avant d’écrire un traitement plus sérieux.

Utiliser BEGIN et END

Les blocs BEGIN et END rendent tes commandes AWK bien plus propres. BEGIN sert à initialiser des variables ou un séparateur de sortie. END sert à afficher un total, une moyenne ou un bilan final.

awk -F: 'BEGIN { OFS=";" } $3 >= 1000 { total++; print $1, $3 } END { print "comptes:", total }' /etc/passwd

Ici, on filtre les comptes avec un UID supérieur ou égal à 1000, on les affiche proprement, puis on imprime un total final. Pour de petits audits d’inventaire, ce pattern est redoutablement efficace.

Cas d’usage concrets

La théorie aide, mais AWK devient vraiment rentable quand tu l’intègres dans des tâches d’admin réelles.

📄

Logs applicatifs

Extraire un code HTTP, une IP ou un champ de latence pour un premier diagnostic.

👤

Audit système

Lister des comptes, UID, shells ou répertoires home depuis /etc/passwd.

📊

Exports tabulaires

Réordonner des colonnes, convertir un séparateur ou préparer un export intermédiaire.

⚙️

Pipelines shell

Nettoyer la sortie d’une commande avant de la passer à sort, uniq ou un autre script.

Exemple concret sur des logs Nginx pour afficher l’IP et le code retour :

awk '{ print $1, $9 }' /var/log/nginx/access.log

Exemple pour compter le nombre de réponses HTTP 500 :

awk '$9 == 500 { total++ } END { print total }' /var/log/nginx/access.log

Exemple pour trier les utilisateurs par UID :

awk -F: '{ print $1, $3 }' /etc/passwd | sort -n -k2

Exemple concret pour repérer les erreurs 5xx dans un log Nginx et obtenir un top rapide :

awk '$9 ~ /^5/ { print $1, $7, $9 }' /var/log/nginx/access.log | sort | uniq -c | sort -nr | head

Exemple pour extraire des services en échec depuis un export texte ou une sortie préparée :

systemctl --failed --no-legend | awk '{ print $1, $2 }'

Exemple d’inventaire disque sur une sortie df -h :

df -h | awk 'NR > 1 { print $1, $5, $6 }'

Si tu travailles souvent sur les logs, tu peux compléter avec notre guide sur journalctl pour le debug systemd. Pour les filtres texte, regarde aussi grep regex Linux et grep vs ripgrep. Si tu automatises ces vérifications, tu peux aussi t’appuyer sur une structure de playbook Ansible en production et Ansible Vault pour industrialiser proprement.

Bonnes pratiques avant de l’utiliser en prod

AWK est rapide, mais une commande mal pensée peut produire un mauvais diagnostic, surtout sur des données imparfaites. Quelques réflexes évitent les erreurs classiques.

✅ Checklist avant exécution

Vérifier le vrai séparateur avec cat -A ou un échantillon du fichier
Tester sur quelques lignes avant de lancer sur tout le fichier
Être explicite sur -F si le séparateur n’est pas du whitespace
Commenter les one-liners critiques dans tes scripts shell
Basculer vers Python ou un parseur dédié si la structure devient trop complexe

Erreurs fréquentes

Séparateur incorrect

Beaucoup d’erreurs viennent d’un mauvais découpage. Si ton fichier est séparé par :, ; ou ,, précise-le avec -F.

Confiance aveugle dans la position des colonnes

Sur une sortie shell, l’ordre des colonnes peut varier selon le contexte. Vérifie toujours avec un échantillon réel.

One-liner devenu illisible

Quand tu empiles conditions, substitutions et calculs, mets le code dans un fichier .awk ou un script shell commenté.

Utiliser awk pour un vrai CSV complexe

Si ton CSV contient des guillemets, des virgules internes ou des sauts de ligne, prends un outil spécialisé. AWK ne sera pas le plus fiable.

🔴

Point critique

Ne prends pas une sortie AWK comme vérité absolue sans vérifier l’échantillon source. En production, un mauvais séparateur ou une colonne déplacée peut fausser tout un diagnostic.

AWK vs autres outils

AWK n’est pas toujours le bon outil unique. Voici une règle simple :

  • cut : bien pour extraire brutalement une colonne simple
  • sed : bien pour remplacer ou éditer du texte
  • grep : bien pour chercher des motifs
  • awk : bien pour combiner extraction, conditions, formatage et calculs

Si tu dois seulement chercher des lignes, grep est souvent plus lisible. Si tu dois combiner sélection + colonnes + logique, AWK reprend l’avantage.

En pratique, beaucoup de pipelines shell efficaces reposent sur le trio grep + awk + sort. Le bon réflexe consiste à garder AWK pour ce qu’il fait le mieux : la logique de champs et de transformation.

FAQ

À quoi sert la commande awk sous Linux ?
Elle sert à lire un fichier ou un flux texte, découper les lignes en champs, appliquer des filtres puis afficher un résultat formaté.
Quelle différence entre awk et grep ?
Grep cherche surtout des motifs. AWK sait en plus manipuler des colonnes, faire des conditions, des boucles et des calculs.
Comment changer le séparateur avec awk ?
Utilise l’option -F, par exemple awk -F: '{ print $1 }' /etc/passwd pour travailler sur un séparateur :.
Peut-on faire des calculs avec awk ?
Oui. AWK sait additionner, compter, comparer et produire un résultat dans un bloc END. C’est très pratique pour des statistiques rapides.
AWK est-il adapté aux gros fichiers ?
Oui, pour beaucoup de traitements texte simples il reste très efficace. Mais il faut garder des commandes lisibles et adaptées au vrai format des données.
Quelle différence entre awk, sed et cut ?
cut extrait des colonnes simples, sed modifie du texte ligne par ligne, et awk combine champs, conditions, variables et calculs. Dès que tu veux faire un mini traitement logique, AWK prend souvent l’avantage.

Conclusion

La commande AWK reste un incontournable sous Linux dès qu’il faut exploiter rapidement du texte structuré. Elle te permet d’extraire des champs, filtrer, transformer, compter et produire des sorties propres sans alourdir ton outillage. Pour du diagnostic système, des scripts shell, de l’analyse de logs ou des fichiers délimités simples, c’est un excellent réflexe.

Si tu veux progresser vite, commence par trois bases : $1 / $0, -F pour les séparateurs, et les conditions avec regex. Avec ça, tu couvres déjà une grosse partie des besoins terrain.

Pour aller plus loin, le bon cap n’est pas d’écrire des one-liners de plus en plus opaques, mais de construire des pipelines lisibles, testables et documentés. C’est là qu’AWK devient vraiment rentable dans une pratique sysadmin ou DevOps sérieuse.

Besoin d’aide pour industrialiser tes scripts shell ou fiabiliser tes traitements Linux ?

Linux-Man accompagne les TPE et PME sur l’administration Linux, l’automatisation, le diagnostic et la fiabilisation des environnements de production.

Parler de ton besoin

Aller plus loin :

Laisser un commentaire