我有一个包含数千个蛋白质序列的文件,格式为;
>EgrG_000615900transcript=EgrG_000615900gene=EgrG_000615900MAIRSFGRIAPARSLLIHFKLVTDAFHGEAPSGPYLLPQAARSLLCEKCDGKCVICDSYVRPCTLVRICDECNYGSYQGRCVICGGTGVSDAYYCRESPKPTSFTKGRNMDSKNDLISNKFTMHADVIISILKPGLFVIVDFFIV
每种蛋白质目前都在自己的产品线上。 'MAIRS ... FFIV'代表蛋白质序列和它之前的东西。我希望蛋白质在一个新的线上,即我希望在'.... EgrG_000615900'之间有一个换行符(这里的数字有所不同,但总有9位数)和'MAIRS ....' 。理想情况下,输出看起来像这样;
>EgrG_000615900transcript=EgrG_000615900gene=EgrG_000615900 MAIRSFGRIAPARSLLIHFKLVTDAFHGEAPSGPYLLPQAARSLLCEKCDGKCVICDSYVRPCTLVRICDECNYGSYQGRCVICGGTGVSDAYYCRESPKPTSFTKGRNMDSKNDLISNKFTMHADVIISILKPGLFVIVDFFIV
文件中的每个蛋白质都以模式>EgrG_.........transcript=EgrG_.........gene=EgrG_.........
开头(点代表任意数字0-9)。
我试过了
sed 's/>EgrG_.........transcript=EgrG_.........gene=EgrG_........./&\n/g' input file > output file
但这不起作用
UPDATE 谢谢大家的关注。事后看来,我觉得我可以简化我的要求。下面是我文件中的一个更大的样本;
>EgrG_000615900 transcript=EgrG_000615900 gene=EgrG_000615900MAIRSFGRIAPARSLLIHFKLVTDAFHGEAPSGPYLLPQAARSLLCEKCDGKCVICDSYVRPCTLVRICDECNYGSYQGRCVICGGTGVSDAYYCRESPKPTSFTKGRNMDSKNDLISNKFTMHADVIISILKPGLFVIVDFFIV >EgrG_001057700 transcript=EgrG_001057700 gene=EgrG_001057700MEESNSEPVIFQVSKLAGRHNYTSFGHKEDLDPQNKFSIPSPADHPGKHRSVLRSLFKGMSSGGKNVALEEQQPTYRQAGSSSHHRYHIHHYPHNPSDDRRPLRGPCFPHMSSSSQSASAFSSPNSSSSPGQRVSTFHAGLREEVLEQDGTSSTTQANFSEEPLVLLVLFPASKSKEAVLPLTTVGRNDCCATASVFTLRLASTYCDVAFFINYFS >EgrG_000972800 transcript=EgrG_000972800 gene=EgrG_000972800MTSYCAVFMVPLLTLLILWGHLPACESTPLPSELIVRRGRTLQDLYRYVQQQYLMCLKCPNCPCETKFNIRRRSGGINWPQYMNASGMTAKNMEEALDDY >EgrG_000198800 transcript=EgrG_000198800 gene=EgrG_000198800MPETGKSGGTTISSKTKSTAVSSGTPVKPMKSESCRLISGESPTSVVILKPAWASFVTPFPPVQEKCCKCGQLVRFSDRIELLGKVFHESCFRCAVCNRPLSNSEAIFHSNAWNCEAHASSYPRLYAS`
虽然它似乎不在这里,但在我的文件中,这四个序列中的每一个都在一行上。虽然加入的数字在各个蛋白质上发生变化,但是字符保持不变(因此可以表示加入; >EgrG_......... transcript=EgrG_......... gene=EgrG_.........
)。您可能会注意到每种情况下的实际蛋白质序列都以“M”开头。这些是我文件中所有蛋白质/系列的唯一一致性。目前,我的文件由一行上的加入和蛋白质序列组成,但我希望上述序列被格式化;
>EgrG_000615900 transcript=EgrG_000615900 gene=EgrG_000615900 MAIRSFGRIAPARSLLIHFKLVTDAFHGEAPSGPYLLPQAARSLLCEKCDGKCVICDSYVRPCTLVRICDECNYGSYQGRCVICGGTGVSDAYYCRESPKPTSFTKGRNMDSKNDLISNKFTMHADVIISILKPGLFVIVDFFIV` >EgrG_001057700 transcript=EgrG_001057700 gene=EgrG_001057700 MEESNSEPVIFQVSKLAGRHNYTSFGHKEDLDPQNKFSIPSPADHPGKHRSVLRSLFKGMSSGGKNVALEEQQPTYRQAGSSSHHRYHIHHYPHNPSDDRRPLRGPCFPHMSSSSQSASAFSSPNSSSSPGQRVSTFHAGLREEVLEQDGTSSTTQANFSEEPLVLLVLFPASKSKEAVLPLTTVGRNDCCATASVFTLRLASTYCDVAFFINYFS` >EgrG_000972800 transcript=EgrG_000972800 gene=EgrG_000972800 MTSYCAVFMVPLLTLLILWGHLPACESTPLPSELIVRRGRTLQDLYRYVQQQYLMCLKCPNCPCETKFNIRRRSGGINWPQYMNASGMTAKNMEEALDDY >EgrG_000198800 transcript=EgrG_000198800 gene=EgrG_000198800 MPETGKSGGTTISSKTKSTAVSSGTPVKPMKSESCRLISGESPTSVVILKPAWASFVTPFPPVQEKCCKCGQLVRFSDRIELLGKVFHESCFRCAVCNRPLSNSEAIFHSNAWNCEAHASSYPRLYAS`
即。加入一行,下一步加入蛋白质序列。总之,在
之间划分了一条线>EgrG_......... transcript=EgrG_......... gene=EgrG_.........
并且第一个'M'是必需的。
再次感谢您的耐心
答案 0 :(得分:2)
您可以使用二十个氨基酸列表,提取蛋白质序列(IUPAC表示法,无终止密码子符号)
alanine - A arginine - R asparagine - N aspartic acid - D cysteine - C glutamine - Q glutamic acid - E glycine - G histidine - H isoleucine - I leucine - L lysine - K methionine - M phenylalanine - F proline - P serine - S threonine - T tryptophan - W tyrosine - Y valine - V special cases: asparagine/aspartic acid - B glutamine/glutamic acid - Z
使用gnu-sed
:
sed -r 's/[ARNDCQEGHILKMFPSTWYVBZ]+$/\n&/' file
使用sed
sed 's/[ARNDCQEGHILKMFPSTWYVBZ]*$/\'$'\n&/g' file
你得到,fasta
格式对应,
>EgrG_000615900transcript=EgrG_000615900gene=EgrG_000615900 MAIRSFGRIAPARSLLIHFKLVTDAFHGEAPSGPYLLPQAARSLLCEKCDGKCVICDSYVRPCTLVRICDECNYGSYQGRCVICGGTGVSDAYYCRESPKPTSFTKGRNMDSKNDLISNKFTMHADVIISILKPGLFVIVDFFIV
答案 1 :(得分:1)
$ sed 's/M/\
&/' file
EgrG_000615900transcript=EgrG_000615900gene=EgrG_000615900
MAIRSFGRIAPARSLLIHFKLVTDAFHGEAPSGPYLLPQAARSLLCEKCDGKCVICDSYVRPCTLVRICDECNYGSYQGRCVICGGTGVSDAYYCRESPKPTSFTKGRNMDSKNDLISNKFTMHADVIISILKPGLFVIVDFFIV
FIV
如果您不是全部,那么请更新您的问题,以显示更具真实代表性的样本输入和预期输出。
答案 2 :(得分:1)
另一个sed
sed -r 's/(^>(.+)transcript=\2gene=\2)/\1\n/' file
寻找模式>{KEY}transcript={KEY}gene={KEY}
并插入换行符。
>EgrG_000615900transcript=EgrG_000615900gene=EgrG_000615900
MAIRSFGRIAPARSLLIHFKLVTDAFHGEAPSGPYLLPQAARSLLCEKCDGKCVICDSYVRPCTLVRICDECNYGSYQGRCVICGGTGVSDAYYCRESPKPTSFTKGRNMDSKNDLISNKFTMHADVIISILKPGLFVIVDFFIV
答案 3 :(得分:1)
图案的长度是固定的。因此,只需在要开始新行的列点处拆分行。例如,将行拆分为第40个字符:
sed -E $'s/(^.{40})/\\1\\\n/g' < file
(注意:我正在使用OS X sed。我必须使用$''
来逃避模式。)
答案 4 :(得分:0)
@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位数和MARIS其余部分用直线划分为EgrG_,然后用剩余的直线划分MARIS。如果这有助于你,请告诉我。