首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在合并第二列时对第一列进行排序

在合并第二列时对第一列进行排序
EN

Stack Overflow用户
提问于 2018-08-24 21:08:01
回答 1查看 38关注 0票数 0

我正在寻找以下问题的解决方案。我有一个文本文件,第一列是geneIDs,第二列是GOterms。因为每个基因都有多个带注释的GOterms,所以相同的GOterms确实出现了多次(第二列中有不同的geneIDs。我只想将唯一的基因I与GOterms合并:我有:

代码语言:javascript
运行
复制
TRINITY_DN10151_c0_g1   GO:0004175
TRINITY_DN10151_c0_g1   GO:0004252
TRINITY_DN10151_c0_g1   GO:0006508
TRINITY_DN10151_c0_g1   GO:0008233
TRINITY_DN102626_c42_g1 GO:0005198
TRINITY_DN102626_c42_g1 GO:0042302
TRINITY_DN102626_c58_g1 GO:0004175

我想要:

代码语言:javascript
运行
复制
TRINITY_DN10151_c0_g1 GO:0004175-GO:0004252-GO:0006508-GO:0008233
TRINITY_DN102626_c42_g1 GO:0005198-GO:0042302

等等。

此外,每个GO术语组合出现一次是很重要的(我真的不知道如何解决这个问题)。因此,如果两个基因在第二列中具有相同的GO术语组合(A、B和C),则它们都应该具有A-B-C。而不是A-C-B..

我尝试过使用sort和uniq,但最终我只删除了行。

有人能帮我解决unix的问题吗?

EN

回答 1

Stack Overflow用户

发布于 2018-08-27 21:29:16

您可以使用一个相当隐蔽的sed命令来完成这项工作。(每个sed命令都是微不足道的或晦涩难懂的。)

代码语言:javascript
运行
复制
sort filename | sed -e :a -e '$!N;s/^\([^ ]* \) *\(.*\)\n\1 */\1\2-/;ta' -e 'P;D' 

粗略地翻译过来,意思是“在这一行后面加上下一行,并用连字符替换换行符和第二个基因名,只要这两个基因名是相同的”。

sort是为了在基因间保持GOterm顺序的一致性。

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

https://stackoverflow.com/questions/52005202

复制
相关文章

相似问题

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