在特定模式后添加换行符

时间:2017-02-25 22:15:53

标签: awk sed

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

>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'是必需的。

再次感谢您的耐心

5 个答案:

答案 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。如果这有助于你,请告诉我。