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

我有两个文件,我想根据第一列进行联合操作:

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 -a1 -a2 -e"-" file1.txt file2.txt 

什么是正确的方法来做到这一点?

“重要:FILE1和FILE2必须在连接字段上排序”。 (从这个在线手册页)。

这个问题#1。 问题#2更糟糕:选项-e记录-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的第二个字段,&c),或0表示连接字段,并且是一个以逗号分隔的列表。 (实际上,我并不记得0值,所以最初给了一个笨拙的解决方案,需要awk后期处理,但目前的解决方案更好…并且不需要awk!)。

-e只适用于-o

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