Comment compter les différences entre deux fichiers sur linux?

j'ai besoin de travailler avec de gros fichiers et je dois trouver des différences entre deux. Et je n'ai pas besoin des différents morceaux, mais du nombre de différences.

Pour trouver le nombre de lignes différentes je viens avec

diff --suppress-common-lines --speed-large-files -y File1 File2 | wc -l

Et ça fonctionne, mais est-il une meilleure manière de le faire?

et comment compter le nombre exact de différences (avec des outils standards comme bash, diff, awk, sed une ancienne version de perl)?

41
demandé sur animuson 2009-10-14 18:06:21

5 réponses

diff -U 0 file1 file2 | grep -v ^@ | wc -l

que moins 2 pour les deux noms de fichier en haut de la diff liste. Le format unifié est probablement un peu plus rapide que le format côte à côte.

35
répondu John Kugelman 2010-03-19 19:09:37

Si vous voulez compter le nombre de lignes qui sont différentes d'utiliser ceci:

diff -U 0 file1 file2 | grep ^@ | wc -l

la réponse de John ne compte-t-elle pas les différentes lignes?

42
répondu Josh 2012-01-12 15:44:15

si vous utilisez Linux / Unix, qu'en est-il de comm -1 file1 file2 pour imprimer les lignes dans fichier1 qui ne sont pas dans fichier2, comm -1 file1 file2 | wc -l pour les compter, et de même pour comm -2 ...?

6
répondu dubiousjim 2010-03-26 23:55:30

Puisque chaque ligne de sortie diffère commence par < ou > caractère, je dirais ceci:

diff file1 file2 | grep ^[\>\<] | wc -l

en utilisant seulement \< ou \> dans la ligne de script, vous pouvez compter les différences dans l'un des fichiers.

4
répondu Michal Nemec 2013-11-26 09:48:27

si vous avez affaire à des fichiers avec un contenu analogue qui devrait être trié ligne par ligne (comme les fichiers CSV décrivant des choses similaires) et vous voudriez par exemple trouver 2 différences dans les fichiers suivants:

File a:    File b:
min,max    min,max
1,5        2,5
3,4        3,4
-2,10      -1,1

vous pouvez implémenter en Python comme ceci:

different_lines = 0
with open(file1) as a, open(file2) as b:
    for line in a:
        other_line = b.readline()
        if line != other_line:
            different_lines += 1
0
répondu Daniel Lee 2015-12-14 15:16:47