加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

bash – 按行名连接多个表

发布时间:2020-12-15 21:47:28 所属栏目:安全 来源:网络整理
导读:参见英文答案 Merging very large csv files with common column????????????????????????????????????6个 我想按行名称合并多个表.这些表的行数不同,它们具有唯一和共享的行,这些行应该全部出现在输出中.如果可能的话我想用awk解决问题,但我对其他解决方案
参见英文答案 > Merging very large csv files with common column????????????????????????????????????6个
我想按行名称合并多个表.这些表的行数不同,它们具有唯一和共享的行,这些行应该全部出现在输出中.如果可能的话我想用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 %dn",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 %dn",b[x]}'  f1 f2
a 5 1
b 5 2
c 0 8
d 9 0
e 0 11

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读