【发布时间】:2016-08-15 00:08:53
【问题描述】:
我试图从一个包含比我需要的多得多的长字符串中提取两条信息。我有一个制表符分隔的 .txt 文件,其格式重复了 115,000 行:
TRINITY_DN89_c0_g1_i1 blastx match_part 2 388 5.00e-73 + 1 Target=UniRef90_UPI0005D06956 2 388;hin=2;hsn=1;db=uniref;hs=1;hf=0;hsl=387;hil=618;ql=390;pi=88.37;qc=99.23;hc=20.87;d=PREDICTED uncharacterized family 31 glucosidase KIAA1161-like;tax=Plutella xylostellaTRINITY_DN89_c0_g1_i1 blastx match_part 2 388 1.00e-72 + 1 Target=UniRef90_A0A0N1IHR0 2 388;hin=3;hsn=1;db=uniref;hs=1;hf=0;hsl=387;hil=647;ql=390;pi=82.95;qc=99.23;hc=19.94;d=Uncharacterized family 31 glucosidase KIAA1161;tax=Papilio;go=GO:0004553,GO:0005975
我想要结束的是开始值,在这种情况下,“TRINITY_DN89_c0_g1_i1”附加到每行末尾“go=GO:”之后的每个值。
在这种情况下我希望的输出如下:
TRINITY_DN89_c0_g1_i1=0004553
TRINITY_DN89_c0_g1_i1=0005975
但是,TRINITY_ 和 go=GO: 之后的字符对于每一行都是不同的,它们代表我与相关基因本体术语注释一起组装的转录组中转录本的唯一标识符。
使用 awk 或 sed 似乎可以实现这一点,但我不确定如何提取这些特定部分,尤其是因为某些字符在行之间有所不同。
非常感谢任何帮助!
作为更新,我已将数据转换为以下格式,这绝对比以前更接近,感谢@shellter 的帮助:
TRINITY_DN30_c0_g1_i1=0004553,GO:0005975
TRINITY_DN89_c0_g1_i1=0004553,GO:0005975
TRINITY_DN89_c0_g2_i1=0004553,GO:0005975
TRINITY_DN63_c0_g1_i1=0004190
TRINITY_DN105_c0_g1_i1=0003964
TRINITY_DN123_c0_g1_i1=0016021,GO:0005524,GO:0005215
TRINITY_DN163_c1_g1_i1=0016021,GO:0005524,GO:0005215
TRINITY_DN163_c1_g1_i1=0016021
TRINITY_DN292_c0_g1_i1=0003677,GO:0006338,GO:0006357
TRINITY_DN223_c0_g1_i1=0005858,GO:0016887,GO:0003777,GO:0003341
TRINITY_DN223_c0_g1_i1=0005509,GO:0051014,GO:0045010,GO:0051016
TRINITY_DN284_c0_g1_i1=0007010
现在,我的问题是我希望每个 GO 值有 1 行,每行都以其关联的成绩单 ID 开头。例如,我想将上面的第一行更改为:
TRINITY_DN30_c0_g1_i1=0004553
TRINITY_DN30_c0_g1_i1=0005975
并对具有多个 GO 值的每一行执行相同的操作。需要明确的是,行可能有一个或多个 GO 值,有些行有很多。这可能吗?
谢谢!
【问题讨论】: