623 tutoriels en ligne

Créa-blog

#100JoursPourCoder
Projet Créa-code

Ressources pour développeur web

Théme de la semaine : Search Console

AWK au terminal : extraire et traiter du texte facilement

Temps de lecture estimé : 1 minutes
Accueil Sécurité AWK au terminal : extraire et traiter du texte facilement

Vous avez un fichier texte, un export CSV, un log serveur, et vous vous dites : “OK… je veux juste récupérer la colonne 3, filtrer les lignes utiles, puis calculer un total… mais je n’ai pas envie d’ouvrir Excel, ni d’écrire 200 lignes de code” ? Bonne nouvelle : AWK est justement l’outil parfait pour ça, directement depuis votre terminal.

  • Extraire rapidement les bonnes informations d’un fichier texte, d’un CSV ou d’une sortie de commande.
  • Gagner en efficacité avec le terminal en filtrant, reformattant et affichant uniquement ce qui compte, pour rendre vos données immédiatement lisibles et exploitables.
  • Automatiser des petits traitements utiles (tri, comptage, calculs simples) pour transformer des données brutes en résultats concrets.

Dans ce tutoriel, on va partir de zéro et apprendre à traiter du texteextraire des donnéesfiltrertransformer, et même faire des calculs avec AWK. Le tout avec des exemples concrets, faciles à comprendre, et surtout utiles dans la vraie vie.

AWK, c’est quoi exactement ?

AWK est un outil en ligne de commande, utilisé depuis le terminal, qui sert à lire du texte ligne par ligne et à agir sur les lignes qui vous intéressent.

Imaginez une machine très simple :

  • Elle lit une ligne
  • Elle découpe cette ligne en “morceaux” (des colonnes)
  • Elle applique une règle (un test)
  • Puis elle affiche ou transforme le résultat

Ce qui rend AWK très puissant, c’est qu’il est fait pour manipuler rapidement des données structurées, comme :

  • des fichiers texte “propres”
  • des exports CSV
  • des logs serveur
  • des sorties de commandes (comme psdfls, etc.)

Et tout ça sans quitter le terminal.

Pourquoi AWK est si utile au terminal ?

Dans beaucoup de situations, vous êtes déjà dans le terminal et vous avez un besoin très simple :

  • afficher seulement certaines colonnes
  • filtrer des lignes
  • faire une petite mise en forme
  • calculer une moyenne ou un total

AWK est parfait quand vous voulez aller vite sans sortir l’artillerie lourde.

Et honnêtement, il y a un petit plaisir : quand vous commencez à “parler AWK”, vous avez l’impression d’avoir un super pouvoir… mais sans la complexité d’un langage complet comme Python.

Le principe de base : “pattern { action }”

La structure d’AWK ressemble presque à une phrase :

awk 'pattern { action }' fichier.txt
  • Le pattern est une condition (optionnelle) qui dit : “sur quelles lignes je veux agir ?”
  • L’action est ce que vous faites sur ces lignes (souvent : afficher quelque chose).

Si vous ne mettez pas de pattern, AWK applique l’action sur toutes les lignes.

Exemple simple : afficher toutes les lignes d’un fichier.

awk '{ print }' fichier.txt

Ici, print, sans rien, affiche la ligne complète.

Comprendre les champs : $1$2$3… et $0

Quand AWK lit une ligne, il la coupe en “champs” (colonnes).

  • $1 = première colonne
  • $2 = deuxième colonne
  • $3 = troisième colonne
  • $0 = la ligne entière

Exemple : imaginons un fichier users.txt

Alban 45 France
Sophie 29 Belgique
Nicolas 35 France

Si vous voulez afficher uniquement les prénoms :

awk '{ print $1 }' users.txt

Résultat :

Alban
Sophie
Nicolas

Si vous voulez prénom + pays :

awk '{ print $1, $3 }' users.txt

Résultat :

Alban France
Sophie Belgique
Karim France

Petit détail important : quand vous écrivez print $1, $3, AWK met un espace automatiquement entre les deux.

AWK découpe en indiquant un séparateur

Par défaut, AWK coupe les colonnes sur :

  • un ou plusieurs espaces
  • ou des tabulations

Donc si votre fichier est séparé par des espaces, ça marche tout de suite. Mais si vous avez un fichier CSV avec des virgules, il faut préciser un séparateur.

Exemple de fichier ventes.csv :

produit,quantite,prix
Clavier,2,49.90
Souris,1,19.90
Ecran,1,199.90

Pour dire à AWK : “sépare par virgule”, on utilise l’option -F :

awk -F',' '{ print $1, $3 }' ventes.csv

Résultat :

produit prix
Clavier 49.90
Souris 19.90
Ecran 199.90

Filtrer des lignes facilement, le fameux “pattern”

Maintenant, on passe à la magie : le filtrage.

Si vous voulez afficher uniquement les lignes où la quantité vaut 1 :

awk -F',' '$2 == 1 { print $0 }' ventes.csv

Résultat :

Souris,1,19.90
Ecran,1,199.90

Explication simple :

  • $2 représente la deuxième colonne
  • == signifie “égal”
  • donc on sélectionne uniquement les lignes où $2 == 1
  • puis on affiche la ligne

Et si vous voulez afficher juste le produit :

awk -F',' '$2 == 1 { print $1 }' ventes.csv

Filtrer avec “contient” grâce aux expressions régulières

AWK sait aussi filtrer avec des mots-clés.

Par exemple, si vous avez un fichier de logs server.log :

INFO User connected
ERROR Database timeout
INFO Request received
ERROR Unauthorized access

Afficher uniquement les lignes qui contiennent ERROR :

awk '/ERROR/ { print }' server.log

Cela affichera :

ERROR Database timeout
ERROR Unauthorized access

Ce /ERROR/ est un pattern de type expression régulière.

Et si vous voulez l’inverse (tout sauf ERROR) :

awk '!/ERROR/ { print }' server.log

Le ! signifie “non”.

La première fois que j’ai vraiment “aimé” AWK, c’était après avoir reçu un fichier de logs énorme, du genre plusieurs centaines de milliers de lignes. Je l’ai ouvert dans un éditeur, il a failli rendre l’âme… puis j’ai tenté un grep, ça allait, mais dès que je voulais extraire une colonne précise, ça devenait pénible.

Et là, AWK m’a fait gagner un temps fou : en une commande, j’ai filtré les erreurs, isolé l’identifiant utilisateur, puis compté combien de fois il revenait. C’était le genre de moment où vous passez de “je vais y passer la soirée” à “ah… c’était ça le problème”.

Pour en savoir plus : La commande GREP

Faire des calculs avec AWK (addition, moyenne, total)

AWK n’est pas qu’un extracteur de colonnes. Il sait calculer. Reprenons ventes.csv et calculons le chiffre d’affaires total (quantité × prix).

produit,quantite,prix
Clavier,2,49.90
Souris,1,19.90
Ecran,1,199.90

On va ignorer l’en-tête et additionner :

awk -F',' 'NR>1 { total += $2 * $3 } END { print total }' ventes.csv

Explication très claire :

  • NR = numéro de ligne (Number of Record)
  • NR>1 = on ignore la première ligne (l’en-tête)
  • total += ... = total = total + …
  • END { ... } = ce bloc s’exécute à la fin

Si vous voulez un affichage plus joli :

awk -F',' 'NR>1 { total += $2 * $3 } END { printf "Total : %.2f €\n", total }' ventes.csv

printf permet de formater comme en C.

Formation web et informatique - Alban Guillier - Formateur

Des formations informatique pour tous !

Débutant ou curieux ? Apprenez le développement web, le référencement, le webmarketing, la bureautique, à maîtriser vos appareils Apple et bien plus encore…

Formateur indépendant, professionnel du web depuis 2006, je vous accompagne pas à pas et en cours particulier, que vous soyez débutant ou que vous souhaitiez progresser. En visio, à votre rythme, et toujours avec pédagogie.

Découvrez mes formations Qui suis-je ?

Une sortie de commande + AWK : combo parfait au terminal

AWK brille particulièrement quand vous l’utilisez après une commande. Imaginez que vous voulez connaître l’espace disque libre avec df -h :

df -h

Ça retourne quelque chose comme :

Filesystem      Size  Used Avail Use% Mounted on
/dev/sda1       100G   70G   30G  70% /

Vous voulez juste afficher le pourcentage d’utilisation et le point de montage :

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

En utilisant l’opérateur pipe |, Résultat :

70% /

Ce genre de mini-outil est extrêmement pratique au terminal, surtout quand vous automatisez avec des scripts.

AWK et les variables internes utiles

AWK a des variables intégrées très pratiques, et on va les expliquer simplement :

  • NR : numéro de ligne (1, 2, 3…)
  • NF : nombre de champs dans la ligne
  • $NF : le dernier champ de la ligne

Exemple : afficher le dernier mot de chaque ligne :

awk '{ print $NF }' users.txt

Sur le fichier :

Alban 45 France
Sophie 29 Belgique
Nicolas 35 France

Résultat :

France
Belgique
France

Et afficher le numéro de ligne + la ligne :

awk '{ print NR ":", $0 }' users.txt

Résultat :

1: Alban 43 France
2: Sophie 29 Belgique
3: Karim 35 France

Modifier une colonne (transformer un fichier)

AWK peut aussi modifier les données.

Reprenons users.txt, et imaginons que vous voulez afficher l’âge en ajoutant “ans”.

awk '{ print $1, $2 " ans", $3 }' users.txt

Résultat :

Alban 43 ans France
Sophie 29 ans Belgique
Karim 35 ans France

Vous pouvez aussi transformer un CSV en affichage lisible :

awk -F',' 'NR>1 { print "Produit:", $1, "| Qté:", $2, "| Prix:", $3 "€" }' ventes.csv

Changer le séparateur de sortie (OFS)

Par défaut, AWK affiche avec des espaces entre les colonnes. Mais vous pouvez choisir un autre séparateur avec OFS (Output Field Separator).

Par exemple, si vous voulez afficher en CSV mais seulement certaines colonnes :

awk -F',' 'BEGIN{OFS=","} NR>1 { print $1, $3 }' ventes.csv

Résultat :

Clavier,49.90
Souris,19.90
Ecran,199.90

Ce petit réglage est très pratique quand vous générez des fichiers à réimporter ailleurs.

Utiliser BEGIN et END (début et fin du traitement)

On l’a déjà croisé, mais on va bien le poser.

  • BEGIN { ... } : s’exécute avant de lire les lignes
  • END { ... } : s’exécute après la dernière ligne

Exemple : afficher une “en-tête” puis traiter :

awk 'BEGIN{ print "Début du traitement..." } { print $0 } END{ print "Terminé !" }' users.txt

C’est très utile au terminal si vous voulez faire un mini-rapport propre.

Filtrer avec des conditions (>, <, >=, <=)

AWK sait comparer des nombres facilement.

Sur users.txt, afficher les personnes de 35 ans ou plus :

awk '$2 >= 35 { print $1, $2 }' users.txt

Résultat :

Alban 45
Nicolas 35

Ce qui est agréable, c’est que c’est lisible. Même un débutant peut comprendre l’intention.

Compter des occurrences (un classique du terminal)

Exemple : compter combien de personnes viennent de France.

awk '$3 == "France" { count++ } END { print count }' users.txt

Résultat :

2

Et afficher aussi qui elles sont :

awk '$3 == "France" { print $1 }' users.txt

Faire un script AWK propre (au lieu d’une seule ligne)

Quand vos commandes AWK deviennent longues, vous pouvez les écrire dans un fichier.

Créez un fichier rapport.awk :

BEGIN {
  FS=","
  OFS=" | "
  total = 0
}

NR > 1 {
  produit = $1
  qte = $2
  prix = $3
  total += qte * prix
  print produit, "Qté=" qte, "Prix=" prix "€"
}

END {
  print "Total", total "€"
}

Puis lancez :

awk -f rapport.awk ventes.csv

Ça devient beaucoup plus lisible, plus facile à corriger, et parfait si vous construisez des outils autour du terminal.

Les erreurs fréquentes des débutants avec AWK (et comment les éviter)

Quand on débute avec AWK, il y a quelques pièges classiques.

Le premier, c’est d’oublier le séparateur -F sur un CSV. Résultat : $1 contient toute la ligne, et vous pensez que votre commande est cassée. En réalité, AWK fait juste ce qu’on lui a demandé.

Le deuxième, c’est de confondre chiffres et texte. Comparer $2 == 1 marche très bien, mais comparer $2 == "1" peut être utile quand vos données contiennent des espaces ou des formats un peu bizarre.

Le troisième, c’est d’avoir des fichiers “sales” : des lignes vides, des séparateurs irréguliers, ou des espaces en trop. Dans ce cas, AWK fonctionne quand même, mais vos colonnes peuvent bouger. Et là, forcément, vous obtenez des résultats bizarres.

La bonne nouvelle, c’est que plus vous pratiquez au terminal, plus vous apprenez à repérer ces problèmes en quelques secondes.

AWK face à grep, sed, cut… qui fait quoi ?

C’est une question qui revient souvent quand on travaille au terminal.

  • grep est un excellent filtre : il garde ou supprime des lignes selon un texte.
  • cut est très pratique pour extraire une colonne, mais il est limité dès que vous voulez faire un calcul ou une condition plus complexe.
  • sed est fait pour modifier du texte (remplacer, supprimer, transformer), mais il est moins “naturel” pour manipuler des colonnes.

AWK, lui, est pile au milieu : il filtre, extrait, calcule, formate. C’est un couteau suisse… mais un couteau suisse qui reste rapide et agréable à utiliser en terminal.


AWK, une compétence simple qui change tout au terminal

Au début, AWK peut paraître un peu étrange avec ses $1$2, ses blocs entre { }, et ses conditions écrites en une ligne. Pourtant, une fois que vous avez compris la logique “je lis une ligne, je filtre, j’extrais, j’affiche”, tout devient fluide. Et surtout, vous commencez à voir votre terminal autrement : plus comme un endroit où on exécute des commandes, mais comme un vrai atelier où on peut façonner de la donnée en temps réel.

Ce qui est intéressant, c’est que vous n’êtes pas obligé de devenir un expert AWK du jour au lendemain. Même en connaissant seulement les bases, vous pouvez déjà gagner un temps énorme sur les tâches répétitives : nettoyer un fichier, faire un mini-rapport, extraire une colonne d’un log, calculer une somme, ou formater une sortie pour un script.

Et si vous aimez apprendre en construisant, le meilleur exercice est simple : à chaque fois que vous voyez un fichier texte ou un CSV, posez-vous une question du type “qu’est-ce que je peux extraire en 10 secondes au terminal ?”. Avec AWK, vous allez vite vous surprendre vous-même… et c’est souvent là que le terminal devient vraiment amusant.