GNU/Linux >> Tutoriels Linux >  >> Linux

Commande comm Linux avec exemples

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 :

  1. Créez deux fichiers de test.
  2. Nommez les fichiers (par exemple, Fichier_1 et Fichier_2).
  3. Ajoutez des mots ou des nombres différents à chaque fichier.
  4. 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.


Linux
  1. Commande Linux wc avec exemples

  2. Commande Linux Tee avec exemples

  3. Commande JQ sous Linux avec exemples

  4. Commande "comm" sous Linux avec des exemples

  5. Commande Linux rsync avec des exemples pratiques

Tutoriel de commande Linux zforce avec exemples

15 Commande Linux ps avec exemples

Commande de recherche Linux avec des exemples pratiques

Commande IP Linux avec exemples

Tutoriel sur la commande de recherche Linux (avec exemples)

Commande lsof sous Linux avec exemples