Restez uniques

Publié le par Peck

Maintenant sur http://linux-attitude.fr/post/Restez-uniques

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
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 utiilserez les commandes suivantes :
$ sort liste1 | uniq > liste1.tmp
$ sort liste2 | uniq > liste2.tmp
 

Toujours en utilisant comm, vous pouvez obtenir les éléments présents dans la liste 1 et pas dans la liste 2. 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.

Publié dans admin

Commenter cet article