首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用awk基于公共字符串(不同列号)合并文件

如何使用awk基于公共字符串(不同列号)合并文件
EN

Stack Overflow用户
提问于 2017-03-22 23:02:30
回答 1查看 63关注 0票数 1

file1:

代码语言:javascript
运行
复制
000001 c-2-3 p045 238744
000001 c-2-4 p042 439709
000002 c-2-4 p055 234744
000003 c-2-5 p099 956755
000004 c-2-9 p064 504435
000005 c-1-5 p043 384029
000006 c-2-2 p011 434444
000009 c-1-3 p083 035905

file2:

代码语言:javascript
运行
复制
000001 1 0 0 rs333 HESN
000002 1 0 0 rs333 POS
000003 1 0 0 rs333 POS
000004 0 1 0 rs333 POS
000005 0 0 1 rs333 NEG
000008 1 0 0 rs333 POS

以下awk命令:

代码语言:javascript
运行
复制
awk 'NR==FNR {h[$1] = $0; next} {print $1,$2,$3,$4,h[$1]}' file2 file1 > file3

生成以下文件:

file3:

代码语言:javascript
运行
复制
000001 c-2-3 p045 238744 000001 1 0 0 rs333 HESN
000001 c-2-4 p042 439709 000001 1 0 0 rs333 HESN
000002 c-2-4 p055 234744 000002 1 0 0 rs333 POS
000003 c-2-5 p099 956755 000003 1 0 0 rs333 POS
000004 c-2-9 p064 504435 000004 0 1 0 rs333 POS
000005 c-1-5 p043 384029 000005 0 0 1 rs333 NEG
000006 c-2-2 p011 434444
000009 c-1-3 p083 035905

但是,file1实际上如下所示:

file1b:

代码语言:javascript
运行
复制
c-2-3 p045 238744 000001
c-2-4 p042 439709 000001
c-2-4 p055 234744 000002
c-2-5 p099 956755 000003
c-2-9 p064 504435 000004
c-1-5 p043 384029 000005
c-2-2 p011 434444 000006
c-1-3 p083 035905 000009

如何更改awk命令以接受file1b (而不是file1)并获得相同的输出(file3)。此外,如何排除file3中的冗余信息(即第5列)?

使用file1b和file2所需的输出:

代码语言:javascript
运行
复制
000001 c-2-3 p045 238744 1 0 0 rs333 HESN
000001 c-2-4 p042 439709 1 0 0 rs333 HESN
000002 c-2-4 p055 234744 1 0 0 rs333 POS
000003 c-2-5 p099 956755 1 0 0 rs333 POS
000004 c-2-9 p064 504435 0 1 0 rs333 POS
000005 c-1-5 p043 384029 0 0 1 rs333 NEG
000006 c-2-2 p011 434444
000009 c-1-3 p083 035905

谢谢!!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-03-23 00:46:26

awk去营救!

代码语言:javascript
运行
复制
awk 'NR==FNR {k=$1; $1=""; a[k]=$0; next} 
             {k=$NF; NF--; print k,$0 a[k]}' file2 file1b 

000001 c-2-3 p045 238744 1 0 0 rs333 HESN
000001 c-2-4 p042 439709 1 0 0 rs333 HESN
000002 c-2-4 p055 234744 1 0 0 rs333 POS
000003 c-2-5 p099 956755 1 0 0 rs333 POS
000004 c-2-9 p064 504435 0 1 0 rs333 POS
000005 c-1-5 p043 384029 0 0 1 rs333 NEG
000006 c-2-2 p011 434444
000009 c-1-3 p083 035905

有一些微妙的技巧用来简化代码..。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42964249

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档