22 juillet 2017
[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 ?