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)?
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.
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?
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 ...
?
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.
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