Подобно diff
опциям, вы можете использовать comm
команду с подстановками процесса и sort
( comm
требует, чтобы файлы, с которыми он работает, были отсортированы). Это позволит вам сосредоточиться только на общих строках, только на строках в одном или другом -1
файле, используя -2
для подавления строк только в первом файле, для подавления строк только во втором файле или -3
для подавления строк в обоих, так что увидеть все строки, которые есть только в первом файле, а не во втором, который вы могли бы сделать
comm -23 <(sort file1) <(sort file2)
конечно, если вы хотите, чтобы вы могли также рассмотреть возможность использования grep
как
grep -vFxf file2 file1
который будет обрабатывать строки в file2
виде шаблонов и печатать только строки из файла file1, которые не имеют match ( -v
) при обработке строк из ( -f
) file2
как фиксированных строк ( -F
), которые должны соответствовать всей строке ( -x
).
Преимущество grep
решения состоит в том, что нет необходимости сортировать файлы, но оно проверяет только строки в одном из файлов, которые не находятся в другом, а не в обоих направлениях одновременно.
comm
нужны отсортированные файлы. (Да, вы упоминаете об этом косвенно, но легко не заметить, как вы это сформулировали). Кроме того,comm
гораздо эффективнее для этого сценария, чемdiff
.grep
Решение может легко запустить из памяти , еслиfile2
велика (экспоненциальный раздутия при преобразовании НКА в ДКА), у нас был вопрос об этом не так давно.