This question already has answers here:
Merging very large csv files with common column
(6个答案)
7年前关闭。
我想按行名称合并多个表。这些表的行数不同,并且它们具有唯一的和共享的行,所有这些都应出现在输出中。如果可能的话,我想用
table1.tab
table2.tab
我想获得下表的输出:
table3.tab
我尝试使用
但是我明白了
table3.tab
第
测试
(6个答案)
7年前关闭。
我想按行名称合并多个表。这些表的行数不同,并且它们具有唯一的和共享的行,所有这些都应出现在输出中。如果可能的话,我想用
awk
解决问题,但我也可以使用其他解决方案。table1.tab
a 5
b 5
d 9
table2.tab
a 1
b 2
c 8
e 11
我想获得下表的输出:
table3.tab
a 5 1
b 5 2
d 9 0
c 0 8
e 0 11
我尝试使用
join
join table1.tab table2.tab > table3.tab
但是我明白了
table3.tab
a 5 1
b 5 2
第
c
,d
和e
行不在输出中。 最佳答案
这个awk oneliner应该适合您的示例:
awk 'NR==FNR{a[$1]=$2;k[$1];next}{b[$1]=$2;k[$1]}
END{for(x in k)printf"%s %d %d\n",x,a[x],b[x]}' table1 table2
测试
kent$ head f1 f2
==> f1 <==
a 5
b 5
d 9
==> f2 <==
a 1
b 2
c 8
e 11
kent$ awk 'NR==FNR{a[$1]=$2;k[$1];next}{b[$1]=$2;k[$1]}END{for(x in k)printf"%s %d %d\n",x,a[x],b[x]}' f1 f2
a 5 1
b 5 2
c 0 8
d 9 0
e 0 11
关于bash - 通过行名联接多个表,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18427798/
10-09 02:26