如何基于一个句子加入3列

时间:2016-10-15 08:33:38

标签: shell unix awk

我想比较三个文件的第一列。如果匹配,我想将输出打印为file2的第4列和fil3的第2列的第5列。如果没有匹配0将被添加到输出的第4和第5列。

  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命令,如果所有3个文件中都可以使用column1值,那么它可以正常工作。

1 个答案:

答案 0 :(得分:0)

您需要加入前2个文件,然后将该输出与第3个文件相连接。您需要几个额外的连接选项才能进行外连接,默认字段值为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

如果你想排除最后一行有2个零值,那么

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'