Filtrage des doublons sous Linux

LinuxLinuxBeginner
Pratiquer maintenant

💡 Ce tutoriel est traduit par l'IA à partir de la version anglaise. Pour voir la version originale, vous pouvez cliquer ici

Introduction

Bienvenue dans le laboratoire (lab) de filtrage des doublons sous Linux. Dans ce lab, vous apprendrez à utiliser la commande uniq sous Linux, qui est un outil essentiel pour filtrer les données en double dans les fichiers texte. Cette commande est particulièrement utile lorsqu'il s'agit de travailler avec des fichiers journaux (log files), des tâches de traitement de données et de manipulation de texte.

L'objectif de ce lab est de vous apprendre à identifier et à supprimer efficacement les lignes en double des fichiers. Vous apprendrez à utiliser la commande uniq de manière autonome et à la combiner avec d'autres commandes telles que sort pour obtenir des capacités de filtrage plus puissantes. Ces compétences sont fondamentales pour les administrateurs de systèmes, les analystes de données et toute personne qui a besoin de traiter des données texte dans des environnements Linux.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL linux(("Linux")) -.-> linux/BasicSystemCommandsGroup(["Basic System Commands"]) linux(("Linux")) -.-> linux/BasicFileOperationsGroup(["Basic File Operations"]) linux(("Linux")) -.-> linux/TextProcessingGroup(["Text Processing"]) linux/BasicSystemCommandsGroup -.-> linux/echo("Text Display") linux/BasicFileOperationsGroup -.-> linux/cat("File Concatenating") linux/BasicFileOperationsGroup -.-> linux/cut("Text Cutting") linux/TextProcessingGroup -.-> linux/sort("Text Sorting") linux/TextProcessingGroup -.-> linux/uniq("Duplicate Filtering") subgraph Lab Skills linux/echo -.-> lab-271417{{"Filtrage des doublons sous Linux"}} linux/cat -.-> lab-271417{{"Filtrage des doublons sous Linux"}} linux/cut -.-> lab-271417{{"Filtrage des doublons sous Linux"}} linux/sort -.-> lab-271417{{"Filtrage des doublons sous Linux"}} linux/uniq -.-> lab-271417{{"Filtrage des doublons sous Linux"}} end

Comprendre la commande uniq

Dans cette étape, vous apprendrez les bases de la commande uniq, qui est utilisée pour filtrer les lignes en double dans les fichiers texte. La commande uniq est particulièrement importante lorsqu'il s'agit de travailler avec des journaux (logs), des fichiers de configuration et d'autres données où les doublons doivent être identifiés ou supprimés.

Commençons par créer un fichier texte d'exemple avec lequel travailler. Nous allons créer un fichier appelé duel_log.txt dans le répertoire ~/project :

echo -e "sword\nsword\nshield\npotion\npotion\nshield" > ~/project/duel_log.txt

Cette commande crée un fichier avec le contenu suivant :

sword
sword
shield
potion
potion
shield

Remarquez qu'il y a des lignes en double dans ce fichier - "sword" apparaît deux fois, "potion" apparaît deux fois et "shield" apparaît deux fois (mais pas de manière consécutive).

Maintenant, utilisons la commande uniq pour filtrer les lignes en double adjacentes :

uniq ~/project/duel_log.txt

Vous devriez voir la sortie suivante :

sword
shield
potion
shield

Remarquez quelque chose d'intéressant ici : La commande uniq a supprimé le deuxième "sword" et le deuxième "potion" car ils étaient des doublons adjacents. Cependant, "shield" apparaît toujours deux fois car ses doublons n'étaient pas adjacents les uns aux autres.

Ceci est un concept clé à comprendre : La commande uniq ne supprime que les lignes en double qui sont adjacentes les unes aux autres (doublons consécutifs). Si le même contenu apparaît ailleurs dans le fichier, mais n'est pas adjacent à son doublon, uniq ne le filtrera pas.

Pour confirmer ce comportement, vérifions à nouveau le fichier original :

cat ~/project/duel_log.txt

Comparez cela avec la sortie de la commande uniq, et vous pouvez clairement voir que seuls les doublons adjacents ont été supprimés.

Combiner sort et uniq pour supprimer tous les doublons

Dans l'étape précédente, vous avez appris que la commande uniq ne supprime que les lignes en double adjacentes. Cependant, dans de nombreux scénarios réels, vous devez supprimer tous les doublons, quelle que soit leur position dans le fichier. Pour y parvenir, vous pouvez combiner la commande sort avec la commande uniq.

La commande sort range les lignes par ordre alphabétique ou numérique, ce qui regroupe les lignes en double. Après le tri, toutes les lignes en double deviennent adjacentes, permettant à la commande uniq de supprimer efficacement tous les doublons.

Commençons par créer un nouveau fichier pour stocker nos résultats :

touch ~/project/sorted_duel_log.txt

Maintenant, utilisons la commande sort pour ranger les lignes de notre fichier original par ordre alphabétique :

sort ~/project/duel_log.txt

Vous devriez voir la sortie suivante :

potion
potion
shield
shield
sword
sword

Remarquez comment la commande sort a regroupé toutes les lignes en double. Maintenant, envoyons cette sortie triée à la commande uniq pour supprimer les doublons :

sort ~/project/duel_log.txt | uniq

La sortie devrait être :

potion
shield
sword

Parfait ! Maintenant, nous avons une liste sans doublons. Sauvegardons cette sortie dans notre fichier sorted_duel_log.txt :

sort ~/project/duel_log.txt | uniq > ~/project/sorted_duel_log.txt

Vérifions le contenu de notre nouveau fichier :

cat ~/project/sorted_duel_log.txt

Vous devriez voir :

potion
shield
sword

Cette combinaison de sort et uniq est une technique puissante pour le traitement de données sous Linux. Elle vous permet de trouver et de supprimer efficacement tous les entrées en double dans un fichier, ce qui est essentiel pour les tâches de nettoyage et d'analyse de données.

Options avancées de uniq et applications pratiques

Maintenant que vous comprenez l'utilisation de base de uniq et comment la combiner avec sort, explorons quelques options supplémentaires de la commande uniq qui la rendent encore plus puissante pour les tâches de traitement de données.

Compter les occurrences avec -c

L'option -c compte le nombre d'occurrences de chaque ligne. Cela est utile lorsque vous voulez savoir combien de fois chaque ligne unique apparaît dans votre fichier :

sort ~/project/duel_log.txt | uniq -c

Vous devriez voir une sortie comme celle-ci :

      2 potion
      2 shield
      2 sword

Cela montre que chaque élément apparaît deux fois dans notre fichier original.

Trouver seulement les lignes en double avec -d

Si vous n'êtes intéressé que par la recherche des lignes en double (les lignes qui apparaissent plus d'une fois), vous pouvez utiliser l'option -d :

sort ~/project/duel_log.txt | uniq -d

Sortie :

potion
shield
sword

Étant donné que tous les éléments de notre fichier ont des doublons, tous sont listés dans la sortie.

Créer un fichier avec seulement des entrées uniques

Créons un nouveau fichier avec un contenu plus varié pour mieux démontrer la commande uniq :

echo -e "apple\napple\napple\nbanana\ncherry\ncherry\ngrape" > ~/project/fruits.txt

Examinons ce fichier :

cat ~/project/fruits.txt

Sortie :

apple
apple
apple
banana
cherry
cherry
grape

Maintenant, utilisons l'option -u pour trouver les entrées qui apparaissent exactement une fois :

sort ~/project/fruits.txt | uniq -u

Sortie :

banana
grape

Cela montre que "banana" et "grape" apparaissent seulement une fois dans notre fichier.

Application dans le monde réel : Analyse de journaux (logs)

Créons un simple fichier de journal pour simuler une application dans le monde réel :

echo -e "INFO: System started\nERROR: Connection failed\nINFO: User logged in\nWARNING: Low memory\nERROR: Connection failed\nINFO: System started" > ~/project/system.log

Maintenant, analysons ce fichier de journal pour savoir quels types de messages apparaissent et combien de fois :

cat ~/project/system.log | sort | uniq -c

La sortie devrait être similaire à :

      2 ERROR: Connection failed
      2 INFO: System started
      1 INFO: User logged in
      1 WARNING: Low memory

Cela vous donne un aperçu rapide des types d'événements dans votre fichier de journal et de leur fréquence.

Vous pouvez également extraire seulement les types de messages (INFO, ERROR, WARNING) en utilisant la commande cut :

cat ~/project/system.log | cut -d: -f1 | sort | uniq -c

Sortie :

      2 ERROR
      3 INFO
      1 WARNING

Cette analyse montre que sur 6 entrées de journal, 3 sont des messages INFO, 2 sont des messages ERROR et 1 est un message WARNING.

Ces exemples démontrent comment combiner des commandes simples comme sort, uniq et cut peut créer des pipelines de traitement de données puissants sous Linux.

Résumé

Dans ce laboratoire (lab), vous avez appris à utiliser la commande uniq sous Linux pour filtrer les lignes en double dans les fichiers texte. Voici les concepts clés et les compétences que vous avez acquises :

  1. Utilisation de base de uniq : Vous avez appris que la commande uniq supprime les lignes en double adjacentes d'un fichier. Cela est utile pour un filtrage de base des doublons, mais présente des limitations.

  2. Combinaison de sort et uniq : Vous avez découvert que pour supprimer tous les doublons, quelle que soit leur position dans un fichier, vous devez d'abord trier le fichier avec la commande sort, puis le filtrer avec uniq.

  3. Options avancées de uniq :

    • L'option -c pour compter les occurrences de chaque ligne
    • L'option -d pour afficher seulement les lignes en double
    • L'option -u pour afficher seulement les lignes uniques (les lignes qui apparaissent exactement une fois)
  4. Applications pratiques : Vous avez vu comment ces commandes peuvent être appliquées à des scénarios réels tels que :

    • L'analyse de fichiers de journal (logs)
    • La recherche et le comptage d'entrées uniques
    • Le nettoyage et la préparation des données

Ces compétences sont fondamentales pour travailler avec des données textuelles dans des environnements Linux et servent de base pour des tâches de traitement de données plus avancées. La combinaison de commandes simples comme sort et uniq crée des pipelines de traitement de données puissants qui peuvent vous aider à gérer et analyser efficacement les données textuelles.