Существует несколько различий между comm
и join
:
comm
сравнивает целые строки; join
сравнивает поля в строках.
comm
печатает целые строки; join
может печатать выбранные части линий.
Если у вас есть один столбец данных в каждом файле, разница будет относительно небольшой. Если у вас несколько столбцов, разница может быть большой.
Также обратите внимание, что при правильных обстоятельствах join
может выводить несколько копий данных из одного файла при объединении с разными строками из другого файла. Это выглядит для меня как ваша проблема; у вас, вероятно, есть несколько повторяющихся значений в одном из файлов. Предположим, у вас есть:
src txt
123 123
123
123
Если вы сделаете comm -12 src txt
, вы получите одну строку вывода; если вы сделаете join src txt
, вы получите три строки вывода. Это ожидается.
Команда join
также может обрабатывать «внешние соединения», когда во втором файле отсутствуют данные для строки в первом файле (LEFT OUTER JOIN в терминах SQL) или наоборот (RIGHT OUTER JOIN), или оба сразу (ПОЛНОЕ НАРУЖНОЕ СОЕДИНЕНИЕ).
В целом, join
- более сложная команда, но она пытается выполнить более сложную работу. Оба полезны; но они полезны в разных местах.