Formatage des données avec awk
1. Introduction à awk
awk
— un outil puissant pour le traitement de texte. Imagine qu'un fichier texte soit une sorte de tableau, où les lignes sont des lignes (logique, non ?) et les colonnes sont des données séparées par des espaces. Dans ce cas, awk
devient ton meilleur pote. Il te permet de sélectionner rapidement des colonnes, de filtrer des lignes, de formater les données et même d'effectuer des opérations arithmétiques.
Il tient son nom de ses créateurs — Alfred Aho, Peter Weinberger et Brian Kernighan (oui, oui, le même Kernighan qui a participé à la création du langage C).
Le concept principal de awk
, c'est de bosser avec les données à l'aide de modèles et d'actions, ce qui en fait une sorte de mini-langage de programmation.
Syntaxe de awk
La syntaxe de base de la commande ressemble à ça :
awk 'modèle {action}' fichier
modèle
— une condition vérifiée pour chaque ligne du fichier.action
— des opérations effectuées sur les lignes correspondant au modèle.- Si le modèle est absent, l'action est appliquée à chaque ligne.
Exemple :
awk '{print $1}' data.txt
Cette commande imprime la première colonne ($1
) pour chaque ligne du fichier data.txt
.
2. Principales fonctionnalités de awk
1. Sélection des colonnes
La façon la plus simple d'utiliser awk
est de sélectionner une ou plusieurs colonnes d'un fichier. Un champ est représenté comme $n
, où n
est le numéro de la colonne, en commençant par 1.
Exemple :
Afficher la première et la troisième colonne :
awk '{print $1, $3}' data.txt
Supposons que notre fichier data.txt
ressemble à ceci :
John 25 Engineer
Jane 30 Designer
Mike 28 Developer
Résultat :
John Engineer
Jane Designer
Mike Developer
2. Traitement conditionnel des lignes
Les conditions permettent de ne traiter que les lignes qui répondent à certains critères.
Exemple :
Afficher les lignes où la valeur dans la deuxième colonne est supérieure à 27 :
awk '$2 > 27 {print $1, $2}' data.txt
Résultat :
Jane 30
Mike 28
3. Opérations arithmétiques
awk
peut exécuter des opérations arithmétiques. C'est utile lorsque vous avez besoin de calculer quelque chose à la volée.
Exemple :
Ajouter 10 à la valeur dans la deuxième colonne :
awk '{print $1, $2+10}' data.txt
Résultat :
John 35
Jane 40
Mike 38
4. Comptage des lignes
awk
connaît automatiquement le nombre de lignes traitées. Cette information est stockée dans la variable NR
(Number of Records).
Exemple :
Compter le nombre de lignes dans le fichier :
awk 'END {print NR}' data.txt
Résultat :
3
3. Fonctionnalités avancées
1. Formatage de la sortie
awk
prend en charge une sortie formatée puissante à l'aide de la fonction printf
. C'est similaire à la fonction printf
en C.
Exemple :
Afficher des données avec alignement :
awk '{printf "%-10s %-5s %-10s\n", $1, $2, $3}' data.txt
Résultat :
John 25 Engineer
Jane 30 Designer
Mike 28 Developer
2. Variables
Tu peux utiliser des variables pour stocker des données et simplifier le travail.
Exemple :
Calculer la somme de la deuxième colonne :
awk '{sum += $2} END {print "Âge Total :", sum}' data.txt
Résultat :
Âge Total : 83
3. Expressions régulières
awk
prend en charge les expressions régulières pour rechercher des lignes.
Exemple :
Afficher les lignes où la première colonne contient la lettre J
:
awk '/J/ {print $0}' data.txt
Résultat :
John 25 Engineer
Jane 30 Designer
4. Exemple pratique
1. Analyse des journaux système
Supposons que nous ayons un fichier de journal système /var/log/syslog
, et que nous souhaitions savoir quels processus sont mentionnés le plus souvent.
Commande :
cat /var/log/syslog | awk '{print $5}' | sort | uniq -c | sort -nr | head -10
Ce qu'elle fait :
cat /var/log/syslog
— lit le contenu du fichier.awk '{print $5}'
— extrait la cinquième colonne (nom du processus).sort
— trie les lignes par ordre alphabétique.uniq -c
— compte le nombre de lignes uniques.sort -nr
— trie les lignes par ordre décroissant des valeurs numériques.head -10
— affiche le top 10 des processus.
2. Préparation d’un rapport sur les salaires
Nous avons un fichier salaries.txt
:
John 25 4000
Jane 30 5000
Mike 28 4500
Objectif :
Augmenter les salaires de 10% et afficher le rapport final.
Solution :
awk '{new_salary = $3 * 1.1; printf "%-10s %-5s %-10.2f\n", $1, $2, new_salary}' salaries.txt
Résultat :
John 25 4400.00
Jane 30 5500.00
Mike 28 4950.00
5. Erreurs fréquentes lors de l'utilisation de awk
Problèmes avec les délimiteurs
Par défaut, awk
utilise des espaces ou des tabulations comme délimiteur. Si vos données sont séparées par autre chose (par exemple, des virgules ou des deux-points), vous devez le préciser avec l'option -F
.
Exemple :
Fichier data.csv
:
John,25,Engineer
Jane,30,Designer
Mike,28,Developer
Commande pour travailler avec le CSV :
awk -F',' '{print $1, $3}' data.csv
Résultat :
John Engineer
Jane Designer
Mike Developer
Saut de champs à cause d'un format incorrect
Parfois, les lignes peuvent contenir des espaces inattendus ou des colonnes manquantes. Cela peut provoquer des erreurs. Il est toujours utile de vérifier les données avant de commencer à travailler.
Usage pratique
Tu viens juste d'apprendre à utiliser awk
pour analyser les logs système, traiter les données sur les salaires et créer des rapports. Ces compétences te seront utiles pour travailler avec de grandes bases de données, des fichiers CSV et des journaux dans des projets réels. Si tu travailles en DevOps, l'analyse des logs système avec awk
deviendra ton superpouvoir. Et si tu es développeur, c'est un excellent moyen de manipuler rapidement des données directement depuis le terminal.
Pour étudier plus profondément awk
, je te recommande de consulter la documentation officielle de GNU Awk. Maintenant, tu sais exactement comment rendre tes données plus flexibles !
GO TO FULL VERSION