Il est souvent utile de comparer les versions des fichiers texte. Pour les administrateurs système et les développeurs de logiciels, cela est particulièrement important. Un administrateur système peut, par exemple, avoir besoin de comparer un fichier de configuration existant à une version précédente pour diagnostiquer un problème système. De même, un programmeur a souvent besoin de voir quelles modifications ont été apportées aux programmes au fil du temps.
La communication affiche une comparaison ligne par ligne de deux fichiers triés. La première des trois colonnes qu'il affiche répertorie les lignes trouvées uniquement dans le fichier1, la deuxième colonne répertorie les lignes trouvées uniquement dans le fichier2 et la troisième répertorie les lignes communes aux deux fichiers. La syntaxe de base de la commande "comm" est :
# comm [options] file1 file2
Argumentation
Les arguments file1 et file2 sont les noms de chemin des fichiers que comm compare. L'utilisation d'un trait d'union (–) à la place de fichier1 ou fichier2 oblige comm à lire l'entrée standard au lieu de ce fichier.
Options
Vous pouvez combiner les options. Sans option, comm produit une sortie à trois colonnes.
Options | Fonction |
---|---|
-1 | N'affiche pas la colonne 1 (n'affiche pas les lignes trouvées uniquement dans le fichier1). |
-2 | N'affiche pas la colonne 2 (n'affiche pas les lignes trouvées uniquement dans le fichier2). |
-3 | N'affiche pas la colonne 3 (n'affiche pas les lignes trouvées dans les deux fichiers). |
-i | Comparaison de lignes insensible à la casse. |
– -vérifier-commande | Vérifiez l'ordre de l'entrée, même si toutes les lignes d'entrée sont appariables |
– -nocheck-order | Ignorer l'ordre de saisie |
– -output-delimiter=STR | délimite les colonnes avec le délimiteur "STR" |
– -aide | Affiche un menu d'aide |
– version | Afficher les informations de version de la commande |
Exemples d'utilisation de la commande "comm" sous Linux
Exemple 1 :Utilisation de base
Voyons un exemple de base de la commande "comm" pour comparer 2 fichiers triés. Les fichiers sont comme indiqué ci-dessous :
# cat file1 aa bb cc dd
# cat file2 cc xx yy zz
La commande comm compare les fichiers ligne par ligne et affiche toutes les lignes identiques. Par exemple :
# comm file1 file2 aa bb cc dd xx yy zz
Cette sortie de commande s'affiche sur trois colonnes :la colonne 1 affiche uniquement les lignes du fichier 1 (aa, bb, dd), la colonne 2 affiche chaque ligne uniquement du fichier 2 (xx, yy, zz) et la colonne 3 affiche chaque ligne identique entre les deux fichiers (cc). Il s'agit d'une comparaison beaucoup plus détaillée qu'avec diff, et le résultat peut être écrasant lorsque tout ce que vous voulez est de trouver ou de vérifier un ou deux changements simples. Cependant, cela peut être extrêmement utile lorsque vous n'êtes pas très familier avec l'un ou l'autre fichier et que vous voulez voir comment ils se comparent.
Exemple 2 :suppression des colonnes
comm prend en charge les options sous la forme -n où n est 1, 2 ou 3. Lorsqu'elles sont utilisées, ces options spécifient la ou les colonnes à supprimer. Par exemple, si nous voulions afficher uniquement les lignes partagées par les deux fichiers, nous supprimerions la sortie des colonnes 1 et 2 :
# comm -12 file1 file2 cc
De même, vous ne pouvez afficher que les lignes qui ne sont présentes que dans fichier1 et fichier2 respectivement en utilisant les commandes ci-dessous.
# comm -23 file1 file2 aa bb dd
# comm -13 file1 file2 xx yy zz
Exemple 3 :vérification du tri en entrée
La commande comm fournit 2 options pour vérifier les entrées triées :
1. –vérifier la commande
2. –nocheck-order
Le –chèque-commande L'option vérifie que l'entrée est correctement triée avant la comparaison. Si l'entrée n'est pas triée, vous obtiendrez une erreur comme indiqué ci-dessous :
# comm --check-order file1 file2 aa bb cc dd xx comm: file 2 is not in sorted order
Alors que le –nocheck-order L'option permet la comparaison de fichiers même si l'entrée n'est pas au format trié. Par exemple :
# cat file1 aa bb cc dd
# cat file2 xx cc yy zz
# comm --nocheck-order file1 file2 aa bb cc dd xx yy zz
Exemple 4 :sortie délimitée
comm fournit également une option pour supprimer la sortie à l'aide du délimiteur fourni par l'utilisateur. Par exemple, au lieu de la sortie délimitée par "tabulation" par défaut, nous pouvons utiliser un délimiteur tel que "|" (tuyau) comme indiqué dans l'exemple ci-dessous :
# comm --output-delimiter="|" file1 file2 aa bb ||cc dd |xx |yy |zz
comm V/s diff
com est similaire à diff en ce que les deux commandes comparent deux fichiers. Mais comm peut aussi être utilisé comme uniq; comm sélectionne les lignes en double ou uniques entre deux fichiers triés, tandis que uniq sélectionne les lignes en double ou uniques dans le même fichier trié.