Как различить два файла с одинаковым количеством строк и получить только разные строки

0

Учитывая 2 файла, которые имеют одинаковое количество строк, возможно ли получить diff с ТОЛЬКО change ( c), другими словами, БЕЗ добавлений ( a) и delete ( 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

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

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

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

Аарре Лааксо
источник