1

Я хочу различать два файла и игнорировать строки, которые присутствуют в одном файле, но отсутствуют в другом.

Например

File1:

foo
bar
baz
bat

File2:

foo
ball
bat

В настоящее время я запускаю следующую команду diff

diff File1 File2 --changed-group-format='%>' --unchanged-group-format=''

Который в этом случае будет производить

bar
baz

в качестве вывода, т.е. только отсутствующие или конфликтующие строки. Я хотел бы печатать только конфликтующие строки, т.е. игнорировать случаи, когда одна строка отсутствует в File2 и присутствует в File1 (а не наоборот). Есть ли способ сделать что-то подобное с помощью diff или мне нужно прибегнуть к другим инструментам? Если так, что бы вы порекомендовали?

2 ответа2

2

Вы также можете посмотреть на comm, если у вас есть в наличии:

comm [-1] [-2] [-3 ] file1 file2
-1 Suppress the output column of lines unique to file1.
-2 Suppress the output column of lines unique to file2.
-3 Suppress the output column of lines duplicated in file1 and file2.

Входные файлы должны быть отсортированы. Однако вы можете изменить поведение по умолчанию с помощью опции --nocheck-order, если она доступна.

В вашем случае вы бы хотели comm --nocheck-order -23 file filter_file

0

Когда вы говорите «конфликтующие», вы имеете в виду записи, которые появляются как в File1, так и в FIle2?

Если это так, используйте следующее -

Создайте скрипт оболочки с именем mycmopare.sh и поместите в него приведенный ниже код.

#!/bin/bash
File1Contents=$(cat File1)

for i in $File1Contents; do
   grep $i File2
done

Запустите mycompare.sh из каталога, где хранятся файлы File1 и File2.

Выход:

foo
bat

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