我有一个包含数千个蛋白质序列的文件,格式为;
每种蛋白质当前都在自己的生产线上。" 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与剩余的线路分配。让我知道这是否对您有帮助。