在特定模式后添加线路断裂

  • 本文关键字:线路 添加 模式 awk sed
  • 更新时间 :
  • 英文 :


我有一个包含数千个蛋白质序列的文件,格式为;


    

每种蛋白质当前都在自己的生产线上。" mairs ... ffiv"代表蛋白质序列和登录之前的东西。我希望该蛋白质在新产品线上,即我希望" .... egrg_000615900"之间有一条断裂(这里的数字有所不同,但总有9位数字)和" mairs ...."。。理想情况下,输出看起来像这样;

> egrg_000615900 transcript = egrg_000615900gene = egrg_000615900

文件中的每种蛋白质均以模式>EgrG_.........transcript=EgrG_.........gene=EgrG_.........开头(DOT代表任何数字0-9)。

我尝试了

sed  's/>EgrG_.........transcript=EgrG_.........gene=EgrG_........./&n/g' input file > output file

但这不起作用

更新谢谢大家的关注。事后看来,我觉得我可以简化我的要求。以下是我文件中的较大样本;

尽管它似乎不在我的文件中,但这四个序列中的每个序列都在一行中。,尽管登录的数字在整个蛋白质上变化,但字符保持不变(因此可以表示登录; >EgrG_......... transcript=EgrG_......... gene=EgrG_.........)。您可能会注意到,在每种情况下,实际蛋白质序列均以" M"开头。这些是文件中所有蛋白质/线的唯一一致性。目前,我的文件由单行上的登录和蛋白质序列组成,但我希望上述序列要格式化;

> egrg_000615900成绩单= egrg_000615900 gene = egrg_000615900> egrg_001057700成绩单= egrg_001057700 gene = egrg_001057700> egrg_000972800成绩单= egrg_000972800 gene = egrg_000972800mtsycavfmvplltlllilwghlpacestplpplpselivrrgrtlqdlyryvlyrryvqqqqylmclkcpncpctkpcetkfnirrrrrsgginwpqymnasgmtaknmeeallddy> egrg_000198800成绩单= egrg_000198800 gene = egrg_000198800

即。在一条线上的登录,下一条蛋白质序列。总而言之,

之间的一条线
> egrg _.........转录本= egrg _......... gene = egrg _.........

,第一个" m"是所需的。

再次感谢您的耐心等待

您可以使用二十个氨基酸列表,用于提取蛋白质序列(IUPAC表示法,没有停车密码子符号)

丙氨酸 -  a精氨酸-R天冬酰胺-N天冬氨酸-D半胱氨酸-c谷氨酰胺-Q谷氨酸-E甘氨酸-g组氨酸-H异亮氨酸-i亮氨酸-L赖氨酸-K蛋氨酸-M苯丙氨酸-f脯氨酸-p丝氨酸-S苏氨酸-t色氨酸-W酪氨酸-YValine -V特别案例:天冬酰胺/天冬氨酸-B谷氨酰胺/谷氨酸-Z

使用gnu-sed

sed -r 's/[ARNDCQEGHILKMFPSTWYVBZ]+$/n&/' file

使用sed

sed 's/[ARNDCQEGHILKMFPSTWYVBZ]*$/'$'n&/g' file

您得到,fasta格式对应,

> egrg_000615900 transcript = egrg_000615900gene = egrg_000615900
$ sed 's/M/
&/' file
EgrG_000615900transcript=EgrG_000615900gene=EgrG_000615900
MAIRSFGRIAPARSLLIHFKLVTDAFHGEAPSGPYLLPQAARSLLCEKCDGKCVICDSYVRPCTLVRICDECNYGSYQGRCVICGGTGVSDAYYCRESPKPTSFTKGRNMDSKNDLISNKFTMHADVIISILKPGLFVIVDFFIV
FIV

如果不是全部,请更新您的问题,以显示一些更真实的代表性样本输入和预期的输出。

另一个sed

sed -r 's/(^>(.+)transcript=2gene=2)/1n/' file

寻找模式>{KEY}transcript={KEY}gene={KEY}并插入newline。

>EgrG_000615900transcript=EgrG_000615900gene=EgrG_000615900
MAIRSFGRIAPARSLLIHFKLVTDAFHGEAPSGPYLLPQAARSLLCEKCDGKCVICDSYVRPCTLVRICDECNYGSYQGRCVICGGTGVSDAYYCRESPKPTSFTKGRNMDSKNDLISNKFTMHADVIISILKPGLFVIVDFFIV

该模式的长度固定。因此,只需在希望新行启动的列点上拆分行。例如,在第40个字符处分开线:

sed -E $'s/(^.{40})/\1\n/g' < file

(注意:我正在使用OS X sed。我必须使用$''逃脱模式。)

@dkaplinski:尝试:

awk --re-interval '{match($0,/.*EgrG_[0-9]{9}MAIRS/);print substr($0,RSTART,RLENGTH-5);sub(/.*EgrG_[0-9]{9}MAIRS/,"");print "MAIRS" $0}'  Input_file

上面的egrg_till 9数字和线路的其余部分将与线路的其余部分,然后在egrg_上进行玛丽斯,然后将Maris与剩余的线路分配。让我知道这是否对您有帮助。

最新更新