CodeGym /Cours /Docker SELF /Formatage des données avec `awk`

Formatage des données avec `awk`

Docker SELF
Niveau 8 , Leçon 2
Disponible

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 :

  1. cat /var/log/syslog — lit le contenu du fichier.
  2. awk '{print $5}' — extrait la cinquième colonne (nom du processus).
  3. sort — trie les lignes par ordre alphabétique.
  4. uniq -c — compte le nombre de lignes uniques.
  5. sort -nr — trie les lignes par ordre décroissant des valeurs numériques.
  6. 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 !

Commentaires
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION