Учитывая 2 файла, которые имеют одинаковое количество строк, возможно ли получить diff с ТОЛЬКО change (c), другими словами, БЕЗ дополнений (a) и удалений (d)?

Например, здесь есть 2 файла по 10 строк в каждом.

file1.txt:

apple
apple
pear
grape
pear
grape
pear
pear
pear
apple

file2.txt:

apple
apple
pear
pear
pear
pear
pear
pear
pear
apple

Вызов diff file1.txt file2.txt приведет к:

4d3
< grape
6c5,6
< grape
---
> pear
> pear

Можно ли получить такой результат, как:

4c4
< grape
---
> pear
6c6
< grape
---
> pear

1 ответ1

1

Попробуй это:

diff <(nl file1.txt) <(nl file2.txt) | awk '{$2=""; print}' | sed -e 's/^\([<>]\)  /\1 /'

Команда nl нумерует строки, что позволяет использовать diff построчно. Команда awk выбирает все в выводе diff кроме номеров строк, добавленных nl . Другими словами, он удаляет номера строк. Команда sed удаляет неуклюжее дополнительное пространство, которое awk оставляет позади.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .