大きなファイルで作業する必要があり、2つの違いを見つける必要があります。また、異なるビットは必要ありませんが、違いの数は必要です。
私が思いつく異なる行の数を見つけるために
diff --suppress-common-lines --speed-large-files -y File1 File2 | wc -l
それは機能しますが、それを行うためのより良い方法はありますか?
そして、正確な違いの数を数える方法(bash、diff、awk、Perlの古いバージョンのsedなどの標準ツール)
diff -U 0 file1 file2 | grep -v ^@ | wc -l
diff
リストの一番上にある2つのファイル名のマイナス2。ユニファイド形式は、おそらくサイドバイサイド形式よりも少し高速です。
異なる行の数をカウントする場合は、これを使用します。
diff -U 0 file1 file2 | grep ^@ | wc -l
ジョンの答えは異なる行を二重に数えませんか?
Linux/Unixを使用している場合、comm -1 file1 file2
file2にないfile1の行を印刷するには、comm -1 file1 file2 | wc -l
はそれらをカウントし、同様にcomm -2 ...
?
異なる出力行はすべて<
または>
文字で始まるため、これをお勧めします。
diff file1 file2 | grep ^[\>\<] | wc -l
スクリプト行で\<
または\>
のみを使用することにより、ファイルの1つでのみ差異をカウントできます。
私は正しい解決策がこれにあると信じています answer 、つまり:
$ diff -y --suppress-common-lines a b | grep '^' | wc -l
1
同じ行ごとにソートする必要のある類似のコンテンツを持つファイルを扱う場合(CSVファイルのように類似のものを記述している場合)、たとえば次のファイルで2つの違いを見つけたい:
File a: File b:
min,max min,max
1,5 2,5
3,4 3,4
-2,10 -1,1
Pythonこのように実装できます:
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