Présentation
Le comm
La commande est un utilitaire Linux simple permettant de comparer des fichiers en mettant l'accent sur le contenu commun. La commande compare deux fichiers triés ligne par ligne et affiche les résultats sur trois colonnes.
Le guide suivant vous expliquera comment utiliser Linux comm
commande avec des exemples.
Prérequis
- Un système exécutant Linux.
- Accès au terminal.
Syntaxe de la commande comm
Le comm
La commande est exécutée avec au moins deux arguments indiquant les noms des fichiers à comparer. L'ajout d'options avant les noms de fichiers personnalise la sortie.
Le comm
de base la syntaxe est :
comm [file_name_1] [file_name_2]
comm [options] [file_name_1] [file_name_2]
Cependant, l'exécution de comm
sans aucune option ne fournit pas de résultats et imprime la sortie suivante :
Options de commande de communication
Utilisation de comm
est simple, mais l'ajout d'options offre une personnalisation supplémentaire.
Le tableau ci-dessous comprend tous les comm
option :
Commande | Description |
---|---|
-1 | Imprime la sortie sans la première colonne, masquant les lignes uniques au premier fichier. |
-2 | Masque la deuxième colonne dans la sortie (lignes uniques au deuxième fichier). |
-3 | N'imprime pas la colonne contenant les lignes communes. |
--check-order | Vérifie si les fichiers sont triés. |
--nocheck-order | Imprime le résultat sans vérifier si les fichiers sont triés. |
--output-delimiter=[any character] | Remplace les espaces par défaut dans la sortie par un autre caractère. |
--total | Affiche le nombre total de lignes dans chaque colonne. |
-z | Affiche les lignes de sortie comme terminées par NULL au lieu de la sortie par défaut terminée par une nouvelle ligne. |
--help | Affiche les informations d'aide. |
--version | Affiche les informations de version. |
Exemples de communication Linux
Le comm
La commande fonctionne avec deux fichiers triés. Pour comprendre comment comm
fonctionne, configurez un environnement de test :
- Créez deux fichiers de test.
- Nommez les fichiers (par exemple, Fichier_1 et Fichier_2).
- Ajoutez des mots ou des nombres différents à chaque fichier.
- Assurez-vous que certains contenus se chevauchent.
Remarque : Linux offre de nombreuses façons de créer des fichiers à partir du terminal. Le plus simple est d'utiliser la commande touch.
Utilisez la commande cat pour afficher le File_1 et Fichier_2 contenu. La sortie montre que les fichiers se chevauchent en trois mots (art , chien , et manière ):
Les sections suivantes utilisent File_1 et Fichier_2 pour expliquer comment comm
fonctionne.
Comparer deux fichiers
Comparez ligne par ligne deux fichiers triés avec :
comm File_1 File_2
La commande imprime les résultats dans trois colonnes :
- Colonne 1 affiche uniquement les valeurs propres au premier fichier.
- Colonne 2 imprime les éléments présents uniquement dans le second fichier.
- Colonne 3 affiche le contenu commun aux deux fichiers :art , chien , et manière .
Masquer les colonnes
Utilisez les arguments -1
, -2
, et -3
et les combinaisons pour afficher uniquement des colonnes particulières. Par exemple, n'imprimez que les lignes communes aux deux fichiers avec :
comm -12 File_1 File_2
Utilisation de -12
avec comm
masque les première et deuxième colonnes, ne laissant que celle contenant des lignes partagées par les deux fichiers.
En revanche, -3
masque la troisième colonne et affiche les lignes propres à chaque fichier :
comm -3 File_1 File_2
Ignorer la casse
Comparaison avec comm
est sensible à la casse. Tous les mots dans File_1 et Fichier_2 sont en minuscules, donc comm
reconnaît l'art , chien , et manière comme commun pour les deux fichiers.
Cependant, si, par exemple, le mot art est en majuscule dans File_1 mais en minuscules dans File_2, la sortie est :
Différences de casse avec le mot art /Art entre deux fichiers invite comm
pour enregistrer le mot comme unique pour chaque fichier. Alors que comm
n'accepte pas -i
comme option pour ignorer la casse, l'option tr fournit une solution de contournement.
Utilisez Tr
sur les deux fichiers pour convertir la casse, puis rediriger la sortie vers des fichiers temporaires (Temp_1 , Temp_2 ):
tr A-Z a-z <File_1 > Temp_1
tr A-Z a-z <File_2 > Temp_2
Tr
convertit le contenu des deux fichiers en minuscules et crée de nouveaux fichiers pour enregistrer la sortie (Temp_1 , Temp_2 ). Les fichiers d'origine restent inchangés.
Exécutez comm
sur Temp_1 et Temp_2 pour comparer des fichiers en "ignorant" la casse :
comm Temp_1 Temp_2
La commande affiche art en minuscules comme mot commun pour les deux fichiers.
Comparer les fichiers non triés
Le comm
La commande produit uniquement une sortie utile lorsque des fichiers triés sont utilisés comme arguments. Lorsque comm
fonctionne avec des fichiers non triés, la sortie n'est pas utilisable et imprime toujours un message d'erreur.
Par exemple, les deux fichiers suivants ne sont pas triés, comme indiqué avec cat
:
Lorsque vous utilisez comm
sur les fichiers non triés, la sortie imprime :
Alors que comm
associe certaines lignes et produit une sortie, la sortie est incomplète et inutilisable. Le message d'erreur indique qu'aucun fichier n'est dans l'ordre de tri.
Pour vérifier que les fichiers ne sont pas triés, utilisez comm --check-order
:
comm --check-order Not_Sorted_File_1 Not_Sorted_File_2
Le --check-order
l'option imprime le message d'erreur et arrête comm
de comparer les fichiers au premier élément non trié.
Pour forcer comm
pour imprimer une sortie et masquer le message d'erreur, utilisez --nocheck-order
:
comm --nocheck-order Not_Sorted_File_1 Not_Sorted_File_2
La sortie n'est pas fiable. Par exemple, le mot art est présent dans les colonnes un et deux, même s'il est commun aux deux fichiers.
Le moyen infaillible d'utiliser comm
avec des fichiers non triés est d'appliquer le tri. Exécutez ce qui suit :
comm <(sort Not_Sorted_File_1 ) <(sort Not_Sorted_File_2)
La sortie montre que les mots art , chien , et manière sont communs aux deux fichiers.
Notez que sort
sans arguments n'affecte que la sortie standard et ne modifie pas les fichiers source. Pourtant, sort
peut être utilisé avec d'autres comm
options.
Par exemple, pour n'imprimer que les mots communs aux deux fichiers non triés, utilisez :
comm -12 <(sort Not_Sorted_File_1 ) <(sort Not_Sorted_File_2)
Pour trier les fichiers source puis exécuter comm
, utilisez sort -o
. Le -o
L'argument enregistre la sortie triée dans un fichier spécifique.
Par exemple, triez Not_Sorted_File_1 et enregistrez la sortie dans ce même fichier avec :
sort -o Not_Sorted_File_1 Not_Sorted_File_1
Exécution cat
après le tri du fichier indique que le fichier est maintenant trié. Répétez le même processus pour le deuxième fichier :
sort -o Not_Sorted_File_2 Not_Sorted_File_2
Exécutez comm
pour comparer des fichiers :
comm Not_Sorted_File_1 Not_Sorted_File_2
Comparer les répertoires
Utilisez comm
avec ls pour comparer les noms de fichiers dans deux répertoires. Par exemple, comparez Directory1 et Répertoire2 :
comm <(ls Directory1) <(ls Directory2)
La première colonne représente les noms de fichiers uniques à Directory1 , le second ceux propres au Directeur y2 , et le troisième représente les noms de fichiers communs aux deux dossiers.
Lors de l'exécution de comm
avec ls
, la commande ne regarde que les noms de fichiers, pas le contenu. Les fichiers répertoriés comme communs aux deux dossiers peuvent toujours différer même s'ils portent le même nom.
Utiliser la communication avec STDIN
Pour comparer un fichier avec une entrée de terminal standard, utilisez un tiret comme l'un des arguments avec comm
.
Par exemple, comparez File_1 avec l'entrée standard en utilisant :
comm File_1 -
Rédigez le texte à comparer File_1 directement sur le terminal ou utilisez un éditeur de texte.
Après avoir appuyé sur Entrée , la commande imprime la sortie sur trois colonnes, en utilisant STDIN au lieu de File_2.
La première colonne représente le contenu unique de File_1 , le second montre les mots trouvés uniquement dans l'entrée standard, et le troisième les mots communs aux deux.
Modifier le séparateur par défaut
Le comm
la sortie sépare les colonnes avec des espaces par défaut. Pour changer le séparateur, utilisez le --output-delimiter
option.
Par exemple, pour utiliser *
au lieu d'espaces, exécutez :
comm --output-delimiter=* File_1 File_2
La sortie montre que les mots dans File_1 n'ont pas d'astérisque, ceux de File_2 ont un astérisque et les éléments communs aux deux fichiers ont deux astérisques.
Afficher le nombre de lignes
Afficher le nombre total de lignes dans chaque colonne avec le --total
choix :
comm --total File_1 File_2
La sortie imprime le nombre de lignes au bas de chaque colonne.
Conclusion
Après avoir suivi les étapes de ce tutoriel, vous savez comment comparer des fichiers ligne par ligne avec le comm
commande.
Ensuite, apprenez une autre façon de comparer des fichiers avec la commande diff.