Ответ 1
diff -U 0 file1 file2 | grep -v ^@ | wc -l
Это минус 2 для двух имен файлов в верхней части списка diff
. Унифицированный формат, вероятно, немного быстрее, чем формат "бок о бок".
Мне нужно работать с большими файлами и найти различия между двумя. И мне не нужны разные биты, но количество различий.
Чтобы найти количество разных строк, я придумал
diff --suppress-common-lines --speed-large-files -y File1 File2 | wc -l
И это работает, но есть ли лучший способ сделать это?
И как подсчитать точное количество различий (со стандартными инструментами, такими как bash, diff, awk, sed какая-то старая версия perl)?
diff -U 0 file1 file2 | grep -v ^@ | wc -l
Это минус 2 для двух имен файлов в верхней части списка diff
. Унифицированный формат, вероятно, немного быстрее, чем формат "бок о бок".
Если вы хотите подсчитать количество различных строк, используйте следующее:
diff -U 0 file1 file2 | grep ^@ | wc -l
Не отвечает ли Джон двойным подсчетам разных строк?
Если вы используете Linux/Unix, а что насчет comm -1 file1 file2
для печати строк в файле1, которые не находятся в файле2, comm -1 file1 file2 | wc -l
для их подсчета и аналогично для comm -2 ...
?
Поскольку каждая выходная строка, которая отличается, начинается с символа <
или >
, я бы предложил следующее:
diff file1 file2 | grep ^[\>\<] | wc -l
Используя только \<
или \>
в строке script, вы можете подсчитать различия только в одном из файлов.
Если вы имеете дело с файлами с аналогичным контентом, которые должны быть отсортированы по одной строке для строк (например, файлы 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
Я считаю, что правильное решение в этом вопросе, а именно:
$ diff -y --suppress-common-lines a b | grep '^' | wc -l
1