gjoin -t $'\t' <(gjoin -t $'\t' -v 1 file1 exl) <(gjoin -t $'\t' -v 1 file2 exl)
(Для моей настройки Mac OS X с установленными инструментами GNU и со значениями, разделенными табуляцией; измените для вашего случая.)
Конструкция <(...)
устанавливает вывод команды каквиртуальный файл, который внешняя командная строка может принять в качестве параметра.
Параметр -v 1
для join
означает: «распечатать все строки первого файла, которые не могут быть объединены».
Таким образом, gjoin -t $'\t' -v 1 file1 exl
будет пытаться объединить первый файл со списком исключений и печатать только те, которые отсутствуют в списке исключений.Аналогично для file2
.
Затем мы берем вывод этих двух отрицательных объединений в реальное объединение.