Вывод списка строк из одного файла в формате DIFF
Я хотел бы получить (GNU)DIFF для распечатки только строк, которые отличаются в одном файле. Так дано
==> diffa.txt <==
line1
line2 - in a only
line3
line4 changed
line5
==> diffb.txt <==
line1
line3
line4 changed in b
line5
line6 in b only
мне бы хотелось diff --someoption diffa.txt diffb.txt
производить
line2 - in a only
line4 changed
Следующее выглядит так, как будто это должно быть полезно, но немного загадочно:
--GTYPE-group-format=GFMT
Similar, but format GTYPE input groups with GFMT.
--line-format=LFMT
Similar, but format all input lines with LFMT.
--LTYPE-line-format=LFMT
Similar, but format LTYPE input lines with LFMT.
LTYPE is `old', `new', or `unchanged'.
GTYPE is LTYPE or `changed'.
GFMT may contain:
%< lines from FILE1
%> lines from FILE2
3 ответа
Точно сказать не могу diff
это могут сделать одни, но вы всегда можете использовать мощь других утилит GNU, чтобы помочь вам.
diff -u diffa.txt diffb.txt | grep '^-[^-]' | sed 's/^-//'
Это делает diff, затем выбирает только те строки, которые начинаются с '-' - они изменены и имеют значения из файла diffa.txt, затем sed
просто удалите эти знаки "-".
Изменить: после нескольких экспериментов с diff
похоже, что приведенная ниже команда производит то, что вы хотите:
diff --changed-group-format='%<' --unchanged-group-format='' diffa.txt diffb.txt
Более простой метод заключается в использовании comm
Утилита linux (для ввода требуется отсортированный файл). Он пишет в стандартный вывод:
строки, которые являются уникальными для diffa.txt
строки, которые уникальны для diffb.txt
линии, которые являются общими
и вы можете подавить каждый из них с помощью параметра 1,2 или 3 соответственно. Так что в вашем случае это будет выглядеть так:
comm -23 diffa.txt diffb.txt
Он подавляет строки, которые являются уникальными для diffb.txt, строки, которые являются общими, и выводит строки, которые являются уникальными только для diffa.txt.
Источник: https://www.tutorialspoint.com/unix_commands/comm.htm
Я хотел бы отметить, что comm
ожидает отсортированные входные файлы и, следовательно, сообщает о других результатах, чем diff
,
diff --changed-group-format='%<' --unchanged-group-format='' diffa.txt diffb.txt
универсален. Слава @vava