在Unix连接操作中填充空字段

时间:2009-06-12 04:24:31

标签: linux unix join

我有两个文件要执行联合操作 基于第1栏:

FILE1.TXT

foo 1
bar 2
qux 3

FILE2.TXT

foo x
qux y
boo z

我希望得到的结果是这样的:

foo  1 x
bar  2 -
qux  3 y
boo  - z

填充第1列的空字段 用“ - ”。

但是为什么这个join命令不像我预期的那样工作?

$ join -a1 -a2 -e"-" file1.txt file2.txt

这样做的正确方法是什么?

2 个答案:

答案 0 :(得分:26)

“重要说明:FILE1和FILE2必须在连接字段上排序。” (来自this在线联机帮助页。)

这个问题#1。问题#2更糟糕:选项-e被严重记录 - 仅与-o一起使用,例如:

$ join -a 1 -a 2 -e'-' -o '0,1.2,2.2' sfile1.txt sfile2.txt
bar 2 -
boo - z
foo 1 x
qux 3 y

其中s前缀名称表示我事先sort编辑的文件。

修改:man join解释了-o开关(我在上面指出的在线联机帮助页也是如此)。它指定要输出的字段(1.2表示文件1中的第2个字段,& c),或0表示连接字段,并且是逗号分隔的列表。 (实际上,我不记得0值,所以最初给出了一个需要awk后处理的笨拙解决方案,但目前的解决方案更好......并且不需要awk!)。

答案 1 :(得分:3)

-e仅适用于-o

join -a 1 -a 2 -e"-" -o auto file1.txt file2.txt