Comparaison des lignes courantes en Linux

LinuxBeginner
Pratiquer maintenant

Introduction

Dans l'environnement Linux, comparer des fichiers est une tâche courante pour les administrateurs système et les développeurs. La commande comm est un outil puissant qui permet aux utilisateurs de comparer deux fichiers texte triés ligne par ligne et d'identifier les lignes uniques et communes entre eux.

Ce labo (LabEx) vous guidera dans l'utilisation de la commande comm pour analyser des fichiers texte. Vous apprendrez à créer des fichiers de test, à comparer leur contenu et à extraire des informations spécifiques des résultats de la comparaison. À la fin de ce labo, vous aurez une bonne compréhension de l'utilisation de cette commande polyvalente pour les tâches de comparaison de fichiers sous Linux.

Préparez vos fichiers texte

Avant de pouvoir utiliser la commande comm, nous devons créer quelques fichiers texte d'exemple avec lesquels travailler. Dans cette étape, nous allons créer deux fichiers texte contenant des listes de commandes Linux courantes.

Tout d'abord, créons un répertoire de travail pour organiser nos fichiers :

mkdir -p ~/project/comm-lab
cd ~/project/comm-lab

Maintenant, créons notre premier fichier texte nommé commands1.txt avec une liste de commandes Linux :

echo -e "ls\ncd\npwd\nmkdir\ntouch\ncomm\nsed\nawk" | sort > commands1.txt

Cette commande effectue les opérations suivantes :

  • echo -e affiche le texte en interprétant les caractères d'échappement (\n crée de nouvelles lignes)
  • La liste des commandes est acheminée (|) vers la commande sort pour trier les éléments par ordre alphabétique
  • La sortie triée est ensuite redirigée (>) vers un fichier nommé commands1.txt

Créons un deuxième fichier texte nommé commands2.txt avec une liste de commandes légèrement différente :

echo -e "ls\ncd\npwd\ncomm\ngrep\nfind\nsed" | sort > commands2.txt

Pour vérifier que nos fichiers ont été créés correctement, nous pouvons utiliser la commande cat pour afficher leur contenu :

cat commands1.txt

Vous devriez voir la sortie suivante :

awk
cd
comm
ls
mkdir
pwd
sed
touch

Vérifions maintenant le contenu du deuxième fichier :

cat commands2.txt

Vous devriez voir :

cd
comm
find
grep
ls
pwd
sed

Notez que certaines commandes apparaissent dans les deux fichiers (comme cd, ls, pwd, comm, sed), tandis que d'autres sont uniques à chaque fichier. Cette configuration nous permettra de démontrer les fonctionnalités de la commande comm dans les étapes suivantes.

Utilisation de la commande comm de base

Maintenant que nos fichiers texte triés sont prêts, nous pouvons explorer l'utilisation de base de la commande comm. La commande comm compare deux fichiers triés ligne par ligne et affiche trois colonnes :

  1. Les lignes uniques au premier fichier
  2. Les lignes uniques au deuxième fichier
  3. Les lignes communes aux deux fichiers

Exécutons la commande comm de base pour comparer nos deux fichiers :

cd ~/project/comm-lab
comm commands1.txt commands2.txt

Vous devriez voir une sortie similaire à celle-ci :

awk
  cd
  comm
 find
 grep
  ls
mkdir
  pwd
  sed
touch

La sortie peut sembler confuse au premier abord, mais elle suit un format spécifique :

  • Colonne 1 (aucune tabulation au début de la ligne) : Les lignes uniquement présentes dans commands1.txt (awk, mkdir, touch)
  • Colonne 2 (une tabulation au début) : Les lignes uniquement présentes dans commands2.txt (find, grep)
  • Colonne 3 (deux tabulations au début) : Les lignes communes aux deux fichiers (cd, comm, ls, pwd, sed)

Cette sortie par défaut vous permet de voir toutes les différences et les similitudes d'un coup, mais elle peut être difficile à lire en raison du formatage avec des tabulations. Dans l'étape suivante, nous apprendrons à rendre cette sortie plus utile en utilisant les options de la commande comm.

Masquage de colonnes avec les options de comm

La sortie par défaut de la commande comm peut être difficile à lire en raison de son format en colonnes. Heureusement, comm propose des options pour supprimer des colonnes spécifiques, ce qui facilite l'extraction des seules informations dont vous avez besoin.

Les options sont les suivantes :

  • -1 : Supprime la colonne 1 (les lignes uniques au premier fichier)
  • -2 : Supprime la colonne 2 (les lignes uniques au deuxième fichier)
  • -3 : Supprime la colonne 3 (les lignes communes aux deux fichiers)

Ces options peuvent être combinées pour afficher uniquement les données qui vous intéressent.

Recherche des lignes uniques au premier fichier

Pour afficher uniquement les lignes qui sont uniques au premier fichier (commands1.txt), nous utilisons les options -2 et -3 pour supprimer les colonnes 2 et 3 :

cd ~/project/comm-lab
comm -23 commands1.txt commands2.txt

Sortie :

awk
mkdir
touch

Ce sont les commandes qui apparaissent uniquement dans commands1.txt.

Recherche des lignes uniques au deuxième fichier

De même, pour afficher uniquement les lignes qui sont uniques au deuxième fichier (commands2.txt), nous utilisons les options -1 et -3 :

comm -13 commands1.txt commands2.txt

Sortie :

find
grep

Ce sont les commandes qui apparaissent uniquement dans commands2.txt.

Recherche des lignes communes

Pour afficher uniquement les lignes qui sont communes aux deux fichiers, nous utilisons les options -1 et -2 :

comm -12 commands1.txt commands2.txt

Sortie :

cd
comm
ls
pwd
sed

Ce sont les commandes qui apparaissent dans les deux fichiers.

Enregistrement des résultats dans des fichiers

Il est souvent utile d'enregistrer ces résultats dans des fichiers distincts pour un usage ultérieur ou un traitement. Faisons-le :

comm -23 commands1.txt commands2.txt > unique_to_file1.txt
comm -13 commands1.txt commands2.txt > unique_to_file2.txt
comm -12 commands1.txt commands2.txt > common_lines.txt

Vérifions le contenu de ces nouveaux fichiers :

echo "Contents of unique_to_file1.txt:"
cat unique_to_file1.txt
echo "Contents of unique_to_file2.txt:"
cat unique_to_file2.txt
echo "Contents of common_lines.txt:"
cat common_lines.txt

La sortie affichera les lignes uniques à chaque fichier et les lignes communes, tout comme nous l'avons vu dans nos commandes précédentes.

Ces techniques sont utiles pour comparer des fichiers de configuration, trouver les différences entre les versions d'un fichier ou identifier les éléments partagés entre des ensembles de données.

Exemples pratiques d'utilisation de comm

Maintenant que vous comprenez l'utilisation de base de la commande comm, explorons quelques exemples pratiques qui démontrent son utilité dans des scénarios du monde réel.

Exemple 1 : Recherche de nouvelles entrées

Imaginez que vous avez deux listes d'utilisateurs - l'une de la semaine dernière et l'autre d'aujourd'hui. Vous souhaitez identifier quels utilisateurs sont nouveaux (ajoutés depuis la semaine dernière).

Créons ces fichiers :

cd ~/project/comm-lab
echo -e "user1\nuser2\nuser3\nuser4\nuser5" | sort > users_last_week.txt
echo -e "user1\nuser3\nuser5\nuser6\nuser7\nuser8" | sort > users_today.txt

Pour trouver les nouveaux utilisateurs (présents dans users_today.txt mais pas dans users_last_week.txt) :

comm -13 users_last_week.txt users_today.txt

Sortie :

user6
user7
user8

Exemple 2 : Recherche d'entrées supprimées

En utilisant les mêmes fichiers, trouvons quels utilisateurs ont été supprimés depuis la semaine dernière :

comm -23 users_last_week.txt users_today.txt

Sortie :

user2
user4

Exemple 3 : Combinaison de comm avec d'autres commandes

La commande comm peut être combinée avec d'autres commandes pour des opérations plus complexes. Par exemple, si nous voulons compter combien de commandes communes il y a dans nos fichiers originaux :

comm -12 commands1.txt commands2.txt | wc -l

Cela envoie les lignes communes à la commande wc -l, qui compte le nombre de lignes.

Sortie :

5

Cela indique qu'il y a 5 commandes communes aux deux fichiers.

Exemple 4 : Utilisation de comm avec des fichiers non triés

La commande comm nécessite des fichiers d'entrée triés. Si vous essayez de l'utiliser avec des fichiers non triés, vous risquez d'obtenir des résultats incorrects. Illustrons cela :

echo -e "cat\nls\npwd\ncd" > unsorted1.txt
echo -e "ls\ncat\ngrep\npwd" > unsorted2.txt

Si nous essayons d'utiliser comm directement :

comm unsorted1.txt unsorted2.txt

La sortie peut être trompeuse car les fichiers ne sont pas triés. La bonne approche est de trier les fichiers d'abord :

comm <(sort unsorted1.txt) <(sort unsorted2.txt)

Cela utilise la substitution de processus pour trier les fichiers à la volée avant de les comparer. Vous devriez voir un résultat correctement formaté avec les colonnes appropriées.

Ces exemples démontrent la polyvalence de la commande comm pour comparer des fichiers texte dans divers scénarios tels que le suivi des modifications, la recherche de différences et le filtrage des données.

Résumé

Dans ce labo, vous avez appris à utiliser la commande comm sous Linux pour comparer des fichiers texte et identifier les différences entre eux. Voici un résumé de ce que vous avez accompli :

  1. Créé des fichiers texte triés pour la comparaison en utilisant des commandes Linux de base
  2. Utilisé la commande comm de base pour comparer deux fichiers et compris son format de sortie en trois colonnes
  3. Appliqué les options de suppression de colonnes (-1, -2, -3) pour extraire des informations spécifiques :
    • Les lignes uniques au premier fichier
    • Les lignes uniques au deuxième fichier
    • Les lignes communes aux deux fichiers
  4. Enregistré les résultats de la comparaison dans des fichiers distincts pour un usage ultérieur
  5. Exploré des exemples pratiques d'utilisation de comm dans des scénarios du monde réel :
    • Recherche de nouvelles entrées dans des listes mises à jour
    • Identification des entrées supprimées
    • Combinaison de comm avec d'autres commandes pour des opérations plus complexes
    • Gestion appropriée de fichiers non triés

La commande comm est un outil puissant pour la comparaison de fichiers texte sous Linux. Elle permet aux administrateurs système, aux développeurs et aux analystes de données d'identifier efficacement les différences et les similitudes entre les fichiers, ce qui est essentiel pour des tâches telles que la gestion de configuration, le contrôle de version et l'analyse de données.

Comprendre comment utiliser efficacement comm et ses options améliorera votre productivité lorsque vous travaillerez avec des fichiers texte dans l'environnement de ligne de commande Linux.