我有两个文件,我想根据第一列执行联合操作:
FILE1.TXT
foo 1
bar 2
qux 3
Run Code Online (Sandbox Code Playgroud)
FILE2.TXT
foo x
qux y
boo z
Run Code Online (Sandbox Code Playgroud)
我希望得到的结果是这样的:
foo 1 x
bar 2 -
qux 3 y
boo - z
Run Code Online (Sandbox Code Playgroud)
第1列的空字段用" - "填充.
但是为什么这个join命令不像我预期的那样工作?
$ join -a1 -a2 -e"-" file1.txt file2.txt
Run Code Online (Sandbox Code Playgroud)
什么是正确的方法呢?
Ale*_*lli 26
"重要:FILE1和FILE2必须在连接字段上排序." (来自此在线手册页).
这个问题#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
Run Code Online (Sandbox Code Playgroud)
其中s前缀名称表示我sort事先编辑过的文件.
编辑:man join解释-o开关(我在上面指出的在线联机帮助页也是如此).它指定要输出的字段(1.2表示文件1中的第2个字段,&c),或0表示连接字段,并且是逗号分隔的列表.(实际上,我不记得0值,所以最初给出了一个需要awk后处理的笨拙解决方案,但是当前的解决方案更好......并且不需要awk!).
| 归档时间: |
|
| 查看次数: |
5482 次 |
| 最近记录: |