我有两个文件要执行联合操作 基于第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
这样做的正确方法是什么?
答案 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