Calculs avec AWK

LinuxBeginner
Pratiquer maintenant

Introduction

Au-delà du filtrage et de l’extraction de texte, awk est un puissant langage de traitement de texte qui permet d’effectuer des opérations arithmétiques. Il peut additionner des colonnes, calculer des moyennes et compter des occurrences, ce qui vous permet de générer directement des rapports et des statistiques depuis la ligne de commande.

C’est l’une des raisons pour lesquelles awk reste utile depuis des décennies : de nombreuses tâches d’exploitation nécessitent de produire rapidement des rapports à partir de fichiers texte, et awk permet de le faire sans feuille de calcul complète ni environnement de programmation séparé.

Dans ce laboratoire, vous apprendrez à utiliser awk pour :

  1. Initialiser des variables : définir des valeurs de départ à l’aide du bloc BEGIN.
  2. Effectuer des calculs : créer des totaux cumulés en additionnant les valeurs de chaque ligne.
  3. Afficher les résultats finaux : produire les totaux et les récapitulatifs à l’aide du bloc END.
  4. Compter sous condition : compter uniquement les lignes qui répondent à des critères précis.

Initialiser une variable

Avant de commencer les calculs, vous devez souvent initialiser des variables. Dans awk, le bloc BEGIN est l’endroit idéal pour cela, car il est exécuté une seule fois avant le traitement des lignes.

Le bloc BEGIN est donc naturellement adapté aux opérations de préparation, comme l’initialisation de compteurs, de totaux ou d’en-têtes. Il joue le même rôle que le code d’initialisation dans d’autres langages de programmation.

Examinez le fichier de données data.txt :

cat data.txt

Il contient deux colonnes : Item ($1) et Quantity ($2).

Vous allez créer une variable appelée total et lui attribuer la valeur 0.

Exécutez cette commande :

awk 'BEGIN { total=0; print "Calculator ready. Total is initialized to:", total }' data.txt

Fonctionnement :

  1. awk exécute le bloc BEGIN.
  2. Il définit la variable total sur 0.
  3. Il affiche le message.
  4. Comme aucun bloc de code principal ne suit le bloc BEGIN, il s’arrête à ce stade (même s’il est techniquement prêt à traiter le fichier).

Additionner une colonne

Vous allez maintenant traiter le fichier. L’objectif est d’additionner les valeurs de la deuxième colonne ($2), qui représente la quantité.

Pour chaque ligne lue par awk, vous allez ajouter $2 à la variable total.

La syntaxe de l’affectation avec addition est total += $2 (ce qui est l’abréviation de total = total + $2).

C’est ici que awk devient bien plus qu’un simple afficheur de colonnes. Il conserve un état à mesure qu’il parcourt le fichier, ce qui lui permet de construire progressivement des totaux et des récapitulatifs au lieu d’afficher uniquement les lignes brutes.

Exécutez cette commande pour observer le calcul ligne par ligne :

awk 'BEGIN { total=0 } { total += $2; print "Added", $1, "("$2") - Current Total:", total }' data.txt

Logique :

  • BEGIN : initialiser total à 0.
  • Boucle principale : pour chaque ligne, ajouter la quantité ($2) à total et afficher l’état du calcul.

Vous pouvez voir le total augmenter à mesure que chaque élément est traité.

Afficher le résultat final

En général, vous souhaitez uniquement obtenir le total final, et non les étapes intermédiaires.

Pour cela, utilisez le bloc END. Ce bloc est exécuté une seule fois, après le traitement de toutes les lignes.

Un script awk comporte donc souvent trois phases : BEGIN pour la préparation, le bloc principal pour le traitement de chaque enregistrement et END pour le rapport final. Cette structure constitue l’un des modèles mentaux les plus importants pour utiliser efficacement awk.

Exécutez la version simplifiée de la commande :

awk 'BEGIN { total=0 } { total += $2 } END { print "Final Total Quantity:", total }' data.txt

Détail du traitement :

  1. BEGIN : définir total sur 0.
  2. { ... } : lire le fichier et ajouter silencieusement $2 à total.
  3. END : lorsque la fin du fichier est atteinte, afficher la valeur finale de total.

La sortie doit être Final Total Quantity: 22.

Compter sous condition

Vous devez souvent compter des occurrences selon une condition, plutôt que simplement additionner toutes les valeurs.

Par exemple : « Combien d’éléments ont une quantité en stock supérieure à 4 ? »

  1. Initialiser un compteur (count = 0).
  2. Vérifier chaque ligne : if ($2 > 4).
  3. Si la condition est vraie, incrémenter le compteur : count++.
  4. Afficher le résultat dans le bloc END.

Cet exemple montre comment awk combine l’analyse, les conditions et les calculs arithmétiques en un seul parcours du fichier. Pour de nombreux rapports d’exploitation, cela vous évite d’écrire un programme séparé dans un autre langage.

Exécutez la commande de comptage :

awk 'BEGIN { count=0 } { if ($2 > 4) count++ } END { print "Items with quantity > 4:", count }' data.txt

Le résultat doit être 2 (Apple et Cherry).

Vous pouvez également combiner plusieurs opérations. La commande suivante additionne uniquement les valeurs supérieures à 4 :

awk 'BEGIN { sum=0 } { if ($2 > 4) sum += $2 } END { print "Sum of quantities > 4:", sum }' data.txt

La somme est 13 (5 + 8).

Résumé

Dans ce laboratoire, vous avez appris à utiliser awk pour effectuer des calculs et produire des statistiques :

  1. Bloc BEGIN : initialiser des variables avant le début du traitement.
  2. Arithmétique (+=) : effectuer des calculs, comme additionner les colonnes ligne par ligne.
  3. Conditions (if) : exécuter une logique uniquement lorsque certains critères sont remplis, par exemple pour effectuer un comptage.
  4. Bloc END : afficher les résultats finaux une fois le traitement du fichier terminé.

Ces fonctions vous permettent de générer directement dans le terminal des récapitulatifs de données et des métriques détaillés à partir de fichiers texte.