Подтвердить что ты не робот

Можно ли показать номер строки в параллельном разностном выходе?

Я использую 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 или мне нужен другой инструмент?

4b9b3361

Ответ 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 переходит к следующей записи.