Je dois travailler avec de gros fichiers et trouver des différences entre les deux. Et je n'ai pas besoin des différents bits, mais du nombre de différences.
Pour trouver le nombre de rangées différentes que je viens avec
diff --suppress-common-lines --speed-large-files -y File1 File2 | wc -l
Et cela fonctionne, mais y a-t-il une meilleure façon de le faire?
Et comment compter le nombre exact de différences (avec des outils standard comme bash, diff, awk, une ancienne version de Perl)?
diff -U 0 file1 file2 | grep -v ^@ | wc -l
Cela moins 2 pour les deux noms de fichier en haut de la liste diff
. Le format unifié est probablement un peu plus rapide que le format côte à côte.
Si vous voulez compter le nombre de lignes différentes, utilisez ceci:
diff -U 0 file1 file2 | grep ^@ | wc -l
La réponse de John ne compte-t-elle pas en double les différentes lignes?
Si vous utilisez Linux/Unix, qu'en est-il de comm -1 file1 file2
pour imprimer les lignes du fichier1 qui ne sont pas dans le fichier2, du comm -1 file1 file2 | wc -l
pour les compter et de la même façon pour le comm -2 ...
Puisque chaque ligne de sortie qui diffère commence par <
ou >
, je suggérerais ceci:
diff file1 file2 | grep ^[\>\<] | wc -l
En utilisant uniquement \<
ou \>
dans la ligne de script, vous ne pouvez compter les différences que dans l'un des fichiers.
Je crois que la bonne solution est dans cette réponse , c'est-à-dire:
$ diff -y --suppress-common-lines a b | grep '^' | wc -l
1
Si vous traitez avec des fichiers ayant un contenu analogue, vous devez trier la même ligne pour ligne (comme les fichiers CSV décrivant des choses similaires) et vous le feriez par exemple. voulez 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 l'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