Как присоединиться к 3 столбцам на основе одного купона

Я хотел бы сравнить первый столбец из трех файлов. если это согласовано, я бы хотел напечатать вывод как 4-й столбец из файла2 и 5-го столбца из 2-го столбца fil3. Если в 4-й и 5-й столбцы вывода не будет добавлено совпадений 0.

  file1.txt
      123,apple,goodquality
        456,orange,mediumquality
        678,grape,lowquality
    786,kiwi,goodquality

file2.txt
123,55
678,2

file3.txt
456,10

output.txt
123,apple,goodquality,55,0
456,orange,mediumquality,0,10
678,grape,lowquality,2,0

Я использовал команду join, она хорошо работает, если значение столбца1 доступно во всех трех файлах.

shell,unix,awk,

-1

Ответов: 1


0

Вам нужно будет присоединиться к первым двум файлам, а затем присоединиться к этому выводу с третьим файлом. Вам понадобится несколько дополнительных опций для соединения, чтобы выполнить внешнее соединение, с 0 в качестве значения по умолчанию. Предполагая, что ваши файлы уже отсортированы лексикографически по первому полю, тогда:

join -t , -a 1 -a 2 -e 0 -o 0,1.2,2.1     file1.txt file2.txt | 
join -t , -a 1 -a 2 -e 0 -o 0,1.2,1.3,2.1 -         file3.txt

выходы

123,apple,123,0
456,orange,0,456
678,grape,678,0
786,kiwi,0,0

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

join -t, -a 1 -a 2 -e 0 -o 0,1.2,2.1     file1.txt file2.txt |
join -t, -a 1 -a 2 -e 0 -o 0,1.2,1.3,2.1 -         file3.txt |
sed '/,0,0$/d'
оболочки, Unix, AWK,
Похожие вопросы