Analysez et transformez des données dans un script Bash

Vos scripts sont désormais de véritables coffres-forts : ils vérifient leurs cibles, traitent des lots entiers et s'arrêtent au moindre danger. Mais ce matin, l’équipe se rend compte que l'application principale a planté pendant la nuit.

Face à 50 énormes fichiers de logs, votre équipe ne veut plus simplement "exécuter des commandes" pour gérer ces fichiers : elle a besoin d’indicateurs clairs pour comprendre l'urgence de la situation. S'agit-il d'une erreur récurrente ou d'un pic anormal de requêtes ?

Le défi n'est plus la manipulation des données, mais la compréhension de leur contenu. Vous allez donc transformer vos scripts en véritables moteurs d'analyse, capables de fouiller des milliers de lignes pour produire automatiquement une information synthétique, lisible et exploitable dans le temps !

Analysez des données textuelles avec des commandes standards

Face à l'urgence de la situation, l’équipe a besoin de réponses immédiates. Arthur est très clair : l'équipe ne veut plus voir défiler des lignes de texte incompréhensibles sur un écran, nous voulons des indicateurs synthétiques comme le nombre total d’événements, les erreurs les plus fréquentes, ou les valeurs qui reviennent le plus souvent.

Pour y parvenir, vous allez devoir utiliser vos outils d'investigation textuelle habituels.

Taper ces commandes manuellement à la volée pose un problème majeur : l'analyse est éphémère. Assembler une ligne de commande parfaite en pleine nuit pendant un incident serveur ne suffit pas si, le lendemain matin pour la réunion de crise, le terminal est fermé et la syntaxe exacte complètement oubliée !

L'objectif ici est d'intégrer vos réflexes d'analyse à l'intérieur de votre script. En encapsulant ces outils dans un fichier exécutable, vous figez votre méthode. L’objectif n’est plus d’explorer ponctuellement les données, mais de produire automatiquement un résultat. Toute l'équipe pourra relancer cet outil demain, ou la semaine prochaine, et comparer les statistiques sur la même base.

Retenez bien la philosophie de cette étape : un script remplace une analyse manuelle par un traitement reproductible.

Voyons concrètement comment intégrer ces commandes dans un fichier pour créer un utilitaire prêt à l'emploi.

Dans cette vidéo, on a :

  • abandonné l'investigation éphémère au profit d'un fichier exécutable,

  • utilisé la commande  wc -l  pour compter le nombre de lignes

  • intégré vos outils de diagnostic habituels directement dans le code du script, notamment la commandegreppour filtrer l'information utile,

  • automatisé le comptage et le classement des occurrences grâce aux commandessortetuniq -c

Maîtrisez les pipes pour chaîner des traitements

Pour produire des statistiques pertinentes face à notre plantage nocturne, une seule commande suffit rarement. Vous allez devoir faire collaborer vos commandes pour filtrer les erreurs, les trier, puis les compter.

Pour garder une chaîne lisible et organisée dans votre fichier, vous pouvez utiliser le caractère  \   (antislash) pour poursuivre la commande à la ligne suivante après chaque pipe.

Voici comment appliquer cette bonne pratique à l'analyse de nos journaux d'activité :

#!/bin/bash
# Analyse claire et formatée grâce à l'antislash (\)
cat "$1" \
    | grep "ERREUR" \
    | sort \
    | uniq -c

Ce script lit le fichier fourni, filtre les données pour isoler les lignes contenant le mot "ERREUR", les trie, puis compte combien de fois chaque erreur se répète. 

Exploitez  awk  pour traiter des données structurées

Le chaînage précédent est parfait pour fouiller dans du texte libre. Mais très souvent, nos serveurs génèrent des données structurées, c'est-à-dire des fichiers organisés avec des colonnes bien définies (par exemple : [Date] [Heure] [Utilisateur] [Statut]).

Arthur est intransigeant sur l'analyse de ces fichiers :

Quand un log est organisé en colonnes, inutile de bricoler avec des filtres textuels approximatifs. Il faut utiliser un outil capable de lire cette structure pour en extraire exactement ce dont on a besoin.

Lorsque les données sont organisées en colonnes, awk permet de viser directement la partie utile.

En intégrant  awk  directement dans la chaîne de pipes de votre script, vous ne vous contentez plus de filtrer des lignes : vous reformatez la donnée à la volée. Vous pouvez lui demander de n'afficher que le nom de l'utilisateur qui a déclenché une erreur, ou même de construire un affichage plus lisible en fusionnant plusieurs champs.

Voyons comment l'intégrer à notre chaîne d'analyse pour affiner notre diagnostic.

Dans cette vidéo, on a :

  • ciblé l'information en isolant une colonne spécifique grâce à unawksimple,

  • filtré les données avec une condition intégrée ($1 == "ERROR"),

  • reformaté le texte brut pour le rendre visuellement compréhensible en concaténant des champs,

  • intégré cet outil dans notre script pour rendre le résultat final parfaitement exploitable.

Produisez une sortie synthétique et exploitable

Le traitement est terminé, place à la présentation finale ! L'équipe n'a pas le temps de faire défiler des centaines de résultats : l’objectif est de produire un affichage clair en un coup d'œil. Rappelez-vous de vos premières investigations manuelles : vous faisiez remonter les événements fréquents en combinant astucieusement le tri et le comptage. La recette est la même ici, à la différence près que vous allez l'automatiser dans votre script pour générer un "Top 5" 100 % autonome :

  1. sort et uniq -c: pour regrouper et compter les éléments identiques.

  2. sort -nr: pour classer ces résultats du plus grand au plus petit.

  3. head: pour couper l'affichage et ne conserver que le haut du classement.

awk  permet ici d’isoler la donnée qui nous intéresse, par exemple un utilisateur ou un type d’événement. Les commandes suivantes peuvent alors trier et compter ces valeurs pour faire ressortir les plus fréquentes.

#!/bin/bash
echo "Voici le Top 5 des utilisateurs ayant généré le plus d'erreurs :"

# On extrait le nom (colonne 3), on compte, on trie, et on limite l'affichage !
cat "$1" \
    | awk '{print $3}' \
    | sort \
    | uniq -c \
    | sort -nr \
    | head -n 5
    
exit 0

En lançant ce script, votre équipe obtient une réponse directe, claire et chiffrée. Gardez toujours cet objectif final en tête lorsque vous automatisez un processus : un script utile produit une information immédiatement lisible.

À vous de jouer 

Contexte 

L’équipe compte sur vous ! Le plantage de cette nuit a généré un log massif. Vos collègues souhaitent obtenir automatiquement une information synthétique à partir de ce fichier de données pour en tirer des conclusions rapides. Un fichier texte structuré nommé evenements.txt, contenant une liste de valeurs répétées organisées en colonnes (comme des catégories, des statuts ou des types), vous est fourni et servira de fichier d'entrée pour tester votre script.

Plutôt que de traiter manuellement ces milliers de lignes dans l'urgence, vous décidez d'appliquer ce que vous venez de voir : vous allez créer un véritable moteur d'analyse sur-mesure. Votre objectif est de concevoir un script capable d’extraire la donnée utile depuis ce fichier structuré, puis d’afficher directement dans le terminal un classement clair des événements les plus fréquents.

Préparation de l’environnement 

Avant de commencer, assurez-vous que le fichier est bien disponible sur votre machine virtuelle et que votre terminal est positionné dans votre dossier personnel. Si besoin, référez-vous à la procédure de téléchargement décrite dans l'activité du chapitre “Créez des scripts Bash exécutables et réutilisables”.

Consignes

Pour accomplir cette tâche et produire cet indicateur clé de manière automatisée, suivez ces étapes :

  1. Créez un nouveau script Bash (ou modifiez un script existant) pour analyser le fichierevenement.txt.

  2. Utilisezawkpour extraire ou reformater l’information pertinente de ce fichier structuré (par exemple, isoler la colonne ciblée).

  3. Intégrez une chaîne de commandes avec des pipes (|) pour trier et compter les données extraites.

  4. Produisez une sortie synthétique et lisible, par exemple en limitant l'affichage pour ne faire ressortir que les valeurs les plus fréquentes.

En résumé 

  • L’objectif est d’intégrer les commandes d’analyse textuelle commegrep,sort,uniq -cetwc -ldirectement dans un script afin de produire des indicateurs reproductibles plutôt qu’une analyse manuelle éphémère.

  • Le pipe|permet de chaîner plusieurs traitements dans le script pour filtrer, trier et compter les données sans créer de fichiers intermédiaires, tout en gardant une syntaxe lisible grâce à l’antislash\.

  • La commandeawkpermet de travailler efficacement sur des données structurées en colonnes, en extrayant des champs précis comme$1,$2ou$3et en appliquant des conditions ciblées.

  • L’intégration deawkau sein d’une chaîne de pipes transforme les données brutes en informations reformatées et compréhensibles directement exploitables par l’équipe.

  • La combinaison desort,uniq -c,sort -nretheadpermet de générer automatiquement une sortie synthétique, comme un classement des éléments les plus fréquents, immédiatement lisible et utile à la prise de décision.

Vos scripts sont désormais de véritables moteurs d'analyse, capables de fournir des indicateurs clairs à l'équipe en un clin d'œil. C'est une excellente avancée pour automatiser vos diagnostics ! Mais face à toutes ces données critiques et aux nouveaux outils que vous venez de créer, votre équipe a désormais besoin d’une chose essentielle : s'assurer de ne jamais rien perdre. Que se passerait-il en cas de panne matérielle majeure ? Nous allons voir comment protéger votre travail en créant un script de sauvegarde automatisé !

Et si vous obteniez un diplôme OpenClassrooms ?
  • Formations jusqu’à 100 % financées
  • Date de début flexible
  • Projets professionnalisants
  • Mentorat individuel
Trouvez la formation et le financement faits pour vous