根据join
的手册页,-a <filenum>
保留文件中所有不可配对的行<filenum>
(1 或 2)。所以,只需添加-a1 -a2
到你的命令行,你应该完成了。例如:
# cat a
1 blah
2 foo
# cat b
2 bar
3 baz
# join -1 1 -2 1 -t" " a b
2 foo bar
# join -1 1 -2 1 -t" " -a1 a b
1 blah
2 foo bar
# join -1 1 -2 1 -t" " -a2 a b
2 foo bar
3 baz
# join -1 1 -2 1 -t" " -a1 -a2 a b
1 blah
2 foo bar
3 baz
这是您要找的吗?
Edit:
由于您提供了更多详细信息,因此以下是如何生成所需的输出(请注意,我的文件a
是你的第一个文件和我的文件b
你的第二个文件。我必须将 -1 1 -2 2 反转为 -1 2 -2 1 才能加入 id)。我还添加了一个字段列表来格式化输出 - 请注意,“0”是其中的连接字段:
# join -1 2 -2 1 -o 1.1,0,1.3,1.4,2.2,2.3 a b
产生你所给予的东西。添加 -a1 -a2 以保留两个文件中不可配对的行,然后您会得到另外两行(您可以从中猜测我的测试数据):
x id4 u t
id5 ui oi
这是相当不可读的,因为任何遗漏的字段都只是一个空格。因此,让我们将它们替换为“-”,结果是:
# join -1 2 -2 1 -a1 -a2 -e- -o 1.1,0,1.3,1.4,2.2,2.3 a b
x id1 a b df cf
x id1 a b ds dg
x id1 c d df cf
x id1 c d ds dg
x id1 d f df cf
x id1 d f ds dg
x id2 c x cv df
x id2 c x as ds
x id3 f v cf cg
x id4 u t - -
- id5 - - ui oi