Соединения Unix - аналогично левому соединению в sql

У меня есть два разных файла, и я хотел бы отображать результаты рядом, но мне просто нужно несколько столбцов из этих файлов.

Файл1

Ab,cd,10
Ef,gh,20
Uv,xy,25

Файл2

Ab,cd,5
Ef,gh,15

Желаемый результат: -

Ab,cd,10,20
Ef,gh,20,15
Uv,xy,25 

И возможно ли получить еще один столбец на выходе, который дает мне разницу между двумя последними столбцами. Извините, я новичок в Unix и не знаю, с чего начать.

Спасибо


person user3208078    schedule 04.04.2016    source источник
comment
см. stackoverflow.com/a/36391183/620097, чтобы узнать, как управлять выводом столбца в соединении. Удачи.   -  person shellter    schedule 04.04.2016
comment
Я не понимаю Ab,cd,10,20, ты имеешь в виду Ab,cd,10,5?   -  person Walter A    schedule 04.04.2016


Ответы (1)


Используйте команду join -- прочитайте man join в вашей системе. Я предполагаю, что ваша система использует GNU coreutils.

Вы хотите, чтобы опция -a всегда печатала строки из первого файла:

$ join -t , -a 1 -o 1.1,1.2,1.3,2.3 file1 file2
Ab,cd,10,5
Ef,gh,20,15
Uv,xy,25,

Вы можете добавить -e 0, если хотите видеть последнюю строку как Uv,xy,25,0

И чтобы добавить новый столбец, вы можете направить вывод в эту программу awk:

join ... | awk -F, -v OFS=, '{$5 = $3 - $4; print}'
person glenn jackman    schedule 04.04.2016