Как отображать только разные строки с использованием diff (bash)

Как я могу отображать только разные строки, используя diff в отдельном файле?

Например, номер файла 1 содержит строку:

1;john;125;3
1;tom;56;2
2;jack;10;5

Номер файла 2 содержит следующие строки:

1;john;125;3
1;tom;58;2
2;jack;10;5

Как сделать следующее:

1;tom;58;2

Ответы

Ответ 1

a.txt:

1;john;125;3
1;tom;56;2
2;jack;10;5

b.txt:

1;john;125;3
1;tom;58;2
2;jack;10;5

Используйте comm:

comm -13 a.txt b.txt 
1;tom;58;2

Параметры командной строки для comm довольно прямолинейны:

-1 подавляет столбец 1 (строки, уникальные для FILE1)

-2 подавляет столбец 2 (строки, уникальные для FILE2)

-3 подавить столбец 3 (строки, которые появляются в обоих файлах)

Ответ 2

Предполагая, что вы хотите сохранить только строки, уникальные для файла 2, вы можете сделать:

comm -13 file1 file2

Обратите внимание, что команда comm ожидает, что два файла будут отсортированы в порядке сортировки.

Ответ 3

Используя спецификаторы группового формата, вы можете подавлять печать неизмененных строк и печатать только измененные строки для измененных

diff --changed-group-format="%>" --unchanged-group-format="" file1 file2

Ответ 4

Вот простое решение, которое я считаю лучше, чем diff:

sort file1 file2 | uniq -u

  • sort file1 file2 объединяет два файла и сортирует их
  • uniq -u печатает уникальные строки (которые не повторяются). Требуется предварительная сортировка ввода.