-
Comparer 2 fichiers
Bonjour à tous,
Je cherche une commande en shell pour pouvoir comparer 2 fichier et effacer les doublons pour avoir en resultat que les differences.
ex:
fichier1:
Citation:
toto
titi
tata
tete
fichier2:
et comme resultat en comparant les 2 fichier, il me faut:
voila, si quelqu'un pourrais m'aider, je lui serais reconnaissant :)
PS: dsl pour cet exemple un peu nul...
-
permière piste :
'man diff'
-
merci je connaissais pas cette commande
-
il y a aussi cmp mais j'utilise diff comme le propose le posteur avant moi.
-
je pense que 'cmp' est plus approprié pour comparer des ficheirs binaire car il compare les fichier byte à byte comme il est dit dans le man :
cmp - compare two files byte by byte
-
La commande cmp indique si les fichiers sont identiques.
Syntaxe:
Code:
cmp fichier1 fichier2
La commande diff recherche les différences entre deux fichiers.
Syntaxe
Code:
diff fichier1 fichier2
Voilà @++ ;)
-
Tu peux te dépatouiller avec awk pour avoir le format de sortie que tu as écrit ;)
Code:
{ cat a | sort | uniq ; echo -- ; cat b | sort | uniq } | awk 'BEGIN { x = 1 } $1 == "--" {x *= 2} $1 != "--" { tab[$0] += x } END { for (i in tab){ if (tab[i] != 3) print i } }'
J'a séparé a et b par une ligne de délimitation '--' ... Je vire les doublons avec uniq dans les listes... Mais avant il faut les trier, d'où "cat a | sort | uniq"
Pour le script awk, y'a diverses manière de faire, je trouve ca assez propre... Si on considère les valeurs que j'ajoute (1 et 2) en binaire (01 et 10) selon que ca soit le premier ou second fichier, pour chaque ligne on aura 01 si unqiuement dans le fichier 1, 10 si uniquement dans le fichier 2... 11 si dans les deux ... (Et pas de ligne si dans aucun ;)) .... Donc si différent de 3, alors c'est que c'est une ligne qui n'apparait pas dans tous les fichiers .... Ca présente l'avantage d'etre rapidement adaptable à 3 fichiers ou plus (interet du '*=') et on peut aisément retrouver le ou les fichier(s) dans le(s)quel(s) la chaine se trouve grace a ce numéro ;)