我正在寻找以下问题的解决方案。我在第一列的geneID和第二个单独的GOterms中有一个文本文件。因为每个基因都有多个带注释的GOterm,所以相同的geneID确实会出现多次(第二列中有不同的GOterm。我只想合并GOterm的唯一GeneID: 我有:
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术语组合出现一次非常重要(而且我真的不知道如何解决)。因此,如果两个基因在第2列中具有相同的GO术语组合(A,B和C),则它们都应具有A-B-C。而且也不是A-C-B。
我尝试使用sort和uniq,但最后我只删除了行。
有人可以帮我解决unix解决方案吗?
答案 0 :(得分:0)
您可以使用相当神秘的sed
命令来完成此操作。 (每个sed
命令都是微不足道的或隐晦的。)
sort filename | sed -e :a -e '$!N;s/^\([^ ]* \) *\(.*\)\n\1 */\1\2-/;ta' -e 'P;D'
松散翻译,上面写着“ ”,“只要在这两个基因名称相同的情况下,将下一行附加到换行符和第二个基因名称之间,就用连字符替换”。
sort
是要在基因之间保持GOterm顺序一致。