Niveau :      
Résumé : comm -1 -2 ; diff -y

Supposons que vous ayez 2 listes. Par exemple la liste des courses et la liste des produits achetés. Il vous est possible de récupérer la liste des éléments communs grâce à la méthode suivante :

$ sort liste1 > liste1.tmp
$ sort liste2 > liste2.tmp
$ comm -1 -2 liste1.tmp liste2.tmp
  • on fait un sort car comm ne fonctionne que sur des fichiers dont les lignes sont ordonnées de la même façon
  • -1 et -2 indiquent de ne pas garder les lignes uniques au fichier 1 ou au fichier 2 (donc les lignes communes)

Notez que si vous aviez plusieurs fois les mêmes lignes dans vos fichiers, il se peut que vous vouliez ne comparer que des lignes différentes (ne pas compter le sel comme non acheté s'il est écrit 2 fois dans la liste des courses par exemple). Dans ce cas vous utiliserez les commandes suivantes :

$ sort liste1 | uniq > liste1.tmp
# ou
$ sort -u liste2 > liste2.tmp



Toujours en utilisant comm, vous pouvez obtenir les éléments présents dans la liste 1 et pas dans la liste 2 (et pas communs). Il vous faut alors utiliser les options "-2 -3".

Sans options comm affiche les données sur 3 colonnes :

$ comm liste1.tmp liste2.tmp

Ceci permet de comparer les fichiers en affichant sur la première colonne les données uniques au fichier 1, sur la 2e les données uniques au fichier 2 et sur la 3e les données communes.

Notez que pour une comparaison visuelle des 2 fichiers (mais plus difficilement scriptable cette fois), la commande diff est plus adaptée :

$ diff -y liste1.tmp liste2.tmp

On a alors les 2 fichiers affichés sur 2 colonnes et un petit caractère > ou < indique si la ligne n'apparaît que sur un des 2 fichiers.