У меня есть два файла A и B.
Я хочу выяснить, какие строки файла B отсутствуют в файле A.
Как мне это сделать? Строки могут быть в любой позиции в файле A
Просто
grep -vxf A B
Если вам нужен также номер строки не совпадающих строк:
grep -nvxf A B
Если B имеет несколько не совпадающих одинаковых строк, и вы хотите только распечатать одинаковые строки один раз, затем
grep -vxf A B | sort | uniq
вы можете использовать команду sdiff. Использование: sdiff file1.txt file2.txt
Вы можете иметь строки в любом месте.
Каковы необычные линии, они будут обозначены символом >
. Посмотрите на изображение ниже. Пример:
Вы говорите, что линии могут быть в любой позиции, но если позиция не важна для вас (просто хотите узнать различия), используйте comm
:
Compare sorted files FILE1 and FILE2 line by line. With no options, produce three-column output. Column one contains lines unique to FILE1, column two contains lines unique to FILE2, and column three contains lines common to both files.
Это требует, чтобы файлы были отсортированы, к счастью, sort
может помочь с этим. Вы можете sort A > A.sorted
отсортировать его, сделать что-то похожее с B, а затем:
comm -1 -3 A.sorted B.sorted
это выведет «строки, уникальные для FILE2», в данном случае это B.sorted.
Вы также можете выполнить внутреннюю сортировку, набрать команду немного сложнее, но вы бы сохранили несколько шагов:
comm -1 -3 <(sort A) <(sort B)