Присоедините два файла на основе столбца

file1:

a, 1 b, 5 c, 2 f, 7 

file2:

 a, 2 f, 9 g, 3 

Я хочу присоединиться к файлу 1 и файлу 2 на основе столбца 1 и получить файл 3, как показано ниже.

file3:

 a, 1, 2 b, 5, - c, 2, - f, 7, 9 g, -, 3 

объединить соответствующие значения, а также сохранить определенные из каждого файла

Использование join :

 $ join -t, -a 1 -a 2 -o0,1.2,2.2 -e ' -' file1 file2 a, 1, 2 b, 5, - c, 2, - f, 7, 9 g, -, 3 

Стандартная join будет выполнять реляционную операцию JOIN в двух отсортированных входных файлах.

Используемые здесь флаги говорят утилите ожидать ввод с разделителями-запятыми ( -t, ) и производить вывод для всех записей в обоих файлах ( -a 1 -a 2 , иначе он будет выдавать только выходные данные для строк с соответствующим первым полем). Затем мы запрашиваем поле объединения вместе со вторым столбцом обоих файлов для -o0,1.2,2.2 ( -o0,1.2,2.2 ) и говорим, что любое отсутствующее поле должно быть заменено строкой ␣- (пробел, с -e ' -' ).

Если вход не отсортирован, он должен быть предварительно отсортирован. В оболочках, которые понимают замену процесса с помощью <( ... ) , это мое

 join -t, -a 1 -a 2 -o0,1.2,2.2 -e ' -' <( sort file1 ) <( sort file2 )