我有两个文件:
File1
12 abc
34 cde
42 dfg
11 df
9 e
File2
23 abc
24 gjr
12 dfg
8 df
我想逐列合并文件(如果第2列相同),输出如下:
File1 File2
12 23 abc
42 12 dfg
11 8 df
34 NA cde
9 NA e
NA 24 gjr
我该怎么做?
我试过这样:
cat File* >> tmp; sort tmp | uniq -c | awk '{print $2}' > column2; for i in
$(cat column2); do grep -w "$i" File*
但这就是我被困的地方...... 不知道如何在greping之后我应该逐列组合文件&写NA缺少值的地方。
希望有人可以帮助我。
答案 0 :(得分:13)
由于我使用bash
运行sh
(没有将进程替换为sh
)进行测试,因此我使用了两个临时文件来准备好与{一起使用的数据{1}}:
join
使用流程替换,您可以写:
$ sort -k2b File2 > f2.sort
$ sort -k2b File1 > f1.sort
$ cat f1.sort
12 abc
34 cde
11 df
42 dfg
9 e
$ cat f2.sort
23 abc
8 df
12 dfg
24 gjr
$ join -1 2 -2 2 -o 1.1,2.1,0 -a 1 -a 2 -e NA f1.sort f2.sort
12 23 abc
34 NA cde
11 8 df
42 12 dfg
9 NA e
NA 24 gjr
$
如果您希望数据格式不同,请使用join -1 2 -2 2 -o 1.1,2.1,0 -a 1 -a 2 -e NA <(sort -k2b File1) <(sort -k2b File2)
对输出进行后期处理:
awk