Можно ли показать номер строки в параллельном разностном выходе?
Я использую diff с параметрами -y
и --suppress-common-lines
, и вывод почти идеален, за исключением того, что я хотел бы видеть номера строк изменений.
Пример:
file1:
line a
line b
line c
file2:
line a
line B
line c
line d
команда и вывод:
$ diff -y --suppress-common-lines file1 file2
line b | line B
> line d
Возможно ли это сочетание опций с diff или мне нужен другой инструмент?
Ответы
Ответ 1
К сожалению, параметр -y
использует стиль форматирования внутри себя (как и --LFMT-line-format
), вы не можете накапливать команды форматирования с помощью -y
.
Вы не можете получить из параметров форматирования, что делает -y
, поэтому вы не можете обходиться напрямую с помощью diff
(я проверил исходный код diff 3.2).
Вам нужно использовать другой инструмент.
Ответ 2
Если вы всегда сравниваете строки с одинаковыми номерами строк, вы можете использовать что-то вроде этого:
$ awk 'NR==FNR{a[NR]=$0;next}{x=a[FNR];if($0!=x)printf("%s;%s;%s\n",FNR,x,$0)}' file1 file2
327;有る;ある
431;先ず;まず
543;連れて行く;連れていく
719;幾ら;いくら
1318;込む;混む
1415;かわいそう;可哀相
1713;だんだん;段々
2491;大みそか;大晦日
4120;もうける;儲ける
4510;ほほ笑む;微笑む
4512;もうかる;儲かる
5727;剥げる;剝げる
FNR
(номер файла записи) равен NR
, когда awk обрабатывает первый файл. Оператор next
переходит к следующей записи.