在bash命令中加入期间是否可以添加常量列?

时间:2012-03-18 12:13:19

标签: bash join

我有2个输入文件

文件1

A   0.01
B   0.09
D   0.05
F   0.08

file2的

A   0.03
C   0.01
D   0.04
E   0.09

我想要的输出是

A   0.01    0.03    1
B   0.09    NULL    1
C   NULL    0.01    1
D   0.05    0.04    1
E   NULL    0.09    1
F   0.08    NULL    1

这是我到目前为止所做的

join -t $'\t' -a 1 -a 2 -1 1 -2 1 -e NULL -o 0,1.2,2.2,'1' file1 file2

给了我

join: invalid field specifier: `1'

2 个答案:

答案 0 :(得分:2)

我不会使用连接,有数以万计的工具可以帮助你,例如:

sed 's/$/\t1/g'

答案 1 :(得分:1)

在Perl,Python或Ruby中可以有更优雅,更灵活的解决方案。根据您的要求,下面显示了Bash解决方案。

  • 文件内容被视为由TAB分隔(否则更改为-d的{​​{1}})。
  • 目前尚不清楚如何在输出中派生第四列。因此,我忽略了它。
  • 不确定cut是否符合您的要求。因为,您可能会获得具有相同第一个元素的行(例如,两行包含sed 's/$/\t1/g'A)。您的示例输出将查找具有每个键的聚合值的唯一列。

<强>执行:

D

<强>代码:

babil@host:~$ cat file1
A   0.01
B   0.09
D   0.05
F   0.08
babil@host:~$ cat file2
A   0.03
C   0.01
D   0.04
E   0.09
babil@host:~$ ./t.sh 
A   0.01    0.03    1
B   0.09    NULL    1
C   NULL    0.01    1
D   0.05    0.04    1
E   NULL    0.09    1
F   0.08    NULL    1
babil@norbit:~$