Как отображать только разные строки с использованием 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
печатает уникальные строки (которые не повторяются). Требуется предварительная сортировка ввода.