我正在寻找以下问题的解决方案。我有一个文本文件,第一列是geneIDs,第二列是GOterms。因为每个基因都有多个带注释的GOterms,所以相同的GOterms确实出现了多次(第二列中有不同的geneIDs。我只想将唯一的基因I与GOterms合并:我有:
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
我想要:
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的问题吗?
发布于 2018-08-27 21:29:16
您可以使用一个相当隐蔽的sed
命令来完成这项工作。(每个sed
命令都是微不足道的或晦涩难懂的。)
sort filename | sed -e :a -e '$!N;s/^\([^ ]* \) *\(.*\)\n\1 */\1\2-/;ta' -e 'P;D'
粗略地翻译过来,意思是“在这一行后面加上下一行,并用连字符替换换行符和第二个基因名,只要这两个基因名是相同的”。
sort
是为了在基因间保持GOterm顺序的一致性。
https://stackoverflow.com/questions/52005202
复制相似问题