Bash连接多个字段

时间:2016-07-08 13:31:14

标签: linux bash unix join

我有两个看起来像这样的文件:

文件1

a b 1 1
b d 2 3

file2的

a 10 11
b 20 21
d 30 31

我想加入他们以获得以下输出,这是第一个文件,其中包含前两个字段在file2中编写的内容:

a b 1 1 10 11 20 21
b d 2 3 20 21 30 31

我尝试使用join,但我无法根据file1的前两个字段设置加入文件。

1 个答案:

答案 0 :(得分:3)

由于你想连接两行,你需要连接两次,将第一行的stdout连接到第二行的stdin:

join -11 -21 file1 file2 | join -12 -21 - file2

编辑:啊拍,反转前两个字段的顺序,是吗?

b a 1 1 10 11 20 21
d b 2 3 20 21 30 31

编辑2:这可能会更好 - 如果你颠倒了连接的顺序,你将得到正确顺序的前两列,但是交换的列将被交换:

join -12 -21 file1 file2 | join -12 -21 - file2

收率:

a b 1 1 20 21 10 11
b d 2 3 30 31 20 21

嘿好吧我认为我们得到了它 - 根据Michael Vehrs的建议编辑3:

join -11 -21 file1 file2 | join -o "1.1 1.2 1.3 1.4 1.5 1.6 2.2 2.3" -12 -21 - file2

收率:

a b 1 1 10 11 20 21
b d 2 3 20 21 30 31