[Linux] Supprimer les doublons entre deux fichiers

Il peut être intéressant de vouloir supprimer les lignes identiques entre deux fichiers comme par exemple lorsqu’un diff ne fonctionne pas bien car les fichiers ne sont pas dans le même ordre.

Exemple :

johan@slashroot:~$ cat fic1
salut
ca va
ok
johan@slashroot:~$ cat fic2
ok
ca va ?
salut

Dans ce cas là le diff n’est pas forcement très probant :

johan@slashroot:~$ diff -u test1 test2
--- test1	2017-07-13 11:23:43.813057000 +0200
+++ test2	2017-07-13 11:23:49.717078000 +0200
@@ -1,3 +1,3 @@
-salut
-ca va
 ok
+ca va ?
+salut

On peut alors supprimer toutes les occurrences identiques entre les deux fichiers pour y avoir plus clair :

johan@slashroot:~$ for match in `grep -F -x -f fic1 fic2` ; do sed -i "/$match/d" fic1 fic2 ; done

On constate alors qu’il n’y avait alors qu’une seule ligne de différence :

johan@slashroot:~$ cat fic1
ca va
johan@slashroot:~$ cat fic2
ca va ?

On peut rester light sans modification et afficher seulement soit les lignes identiques, soit les lignes différents.

Afficher les lignes identiques :

johan@slashroot:~$ grep -F -x -f fic1 fic2
ok
salut

Affiches les lignes différentes :

johan@slashroot:~$ grep -v -F -x -f fic1 fic2
ca va ?
Tags:,

Add a Comment

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *