新手求助perl代码

>RPSAaaaacctcactaatcacttccctatcgtttcTCGATAAGGGTTCTCTTTCAATTTAATCCCTGTGGCATTCACTACgtaa... >RPSA
aaaacctcactaatcacttccctatcgtttcTCGATAAGGGTTCTCTTTCAATTTAATCCCTGTGGCATTCACTACgtaagtttttgttttctctgaaattttcctaaaacctcactaatcacttccctatcgtttcgtcgattgc
agGTTAACCGTTGCTCCTAATTAACGGAACCTCGCTGCATCGCTTCGATCGAGTACCCGGGAGAGgtaagcagaggggcactttaattatcggcctcagtcgggaataaccggtcaattcaaaatctgtttgctaacgtaaacaat
tcctccgtcctgccagGTCTTTGCCATCTCGCCCGTCCCTACGGTCAGCGTGCCGTGCTGAAGTACGCCCACTACACGCAGGCGTTCTTTTCGTGAAAACAGGgggaataaccggtcaattcaaaatctgtt
要求:1 打开文件in.txt,就是上面序列。 2把序列开头和结尾的小写序列删除,I开头的是小写序列,E开头是大写序列。 3 序列整理之后 ,输出文件1.txt:
>RPSA
I001gtaagtttttgttttctctgaaattttcctaaaacctcactaatcacttccctatcgtttcgtcgattgcag
E001TCGATAAGGGTTCTCTTTCAATTTAATCCCTGTGGCATTCACTAC
I002gtaagcagaggggcactttaattatcggcctcagtcgggaataaccggtcaattcaaaatctgtttgctaacgtaaacaattcctccgtcctgccag
E002GTTAACCGTTGCTCCTAATTAACGGAACCTCGCTGCATCGCTTCGATCGAGTACCCGGGAGAG
E003GTCTTTGCCATCTCGTCCCGTCCCTACGGTCAGCGTGCCGTGCTGAAGTACGCCCACTACACGCAGGCGTTCTTTTCGTGAAAACAGG
4 把E开头的序列(E001,E002,E003)连成一条序列之后以E000开头,并分别放到I序列下面,输出文件2.txt:
>RPSA
I001gtaagtttttgttttctctgaaattttcctaaaacctcactaatcacttccctatcgtttcgtcgattgcag
E000TCGATAAGGGTTCTCTTTCAATTTAATCCCTGTGGCATTCACTACGTTAACCGTTGCTCCTAATTAACGGAACCTCGCTGCATCGCTTCGATCGAGTACCCGGGAGAGGTCTTTGCCATCTCGTCCCGTCCCTACGGTCAGCGTGCCGTGCTGAAGTACGCCCACTACACGCAGGCGTTCTTTTCGTGAAAACAGG
I002gtaagcagaggggcactttaattatcggcctcagtcgggaataaccggtcaattcaaaatctgtttgctaacgtaaacaattcctccgtcctgccag
E000TCGATAAGGGTTCTCTTTCAATTTAATCCCTGTGGCATTCACTACGTTAACCGTTGCTCCTAATTAACGGAACCTCGCTGCATCGCTTCGATCGAGTACCCGGGAGAGGTCTTTGCCATCTCGTCCCGTCCCTACGGTCAGCGTGCCGTGCTGAAGTACGCCCACTACACGCAGGCGTTCTTTTCGTGAAAACAGG
展开
 我来答
百度网友d580670
2012-11-01 · TA获得超过1983个赞
知道大有可为答主
回答量:2054
采纳率:82%
帮助的人:678万
展开全部
$str="";
if ($str=/([a-z]+)([A-Z]+)([a-z]+)/)
{
$num++;
printf("I%03d$1$3",$num);
printf("E%03d$2",$num);

push @A,$2;
}
if ($#A){print "E000", join("",@A);}
自己改下往文件读写的过程。。
追问
好像和我要求不符。说明一下:上面的序列是连着的,并且基因也很多,I开头的序列个数也不确定。
文件in.txt中有很多基因,程序改怎么修改。
open IN,"in.txt";
open OUT,">out.txt";
$str=;
if ($str=/([a-z]+)([A-Z]+)([a-z]+)/)
{
$num++;
printf("I%03d$1$3",$num);
printf("E%03d$2",$num);

push @A,$2;
}
if ($#A){print OUT "E000", join("",@A);}
close IN;
close OUT;
追答
open(IN,"IN.txt");
open(OUT1,'+>',"1.txt");
OPEN(OUT2,'+>','2.txt');
print OUT2 "E000";
while($str=)
{
if ($str=/([a-z]+)([A-Z]+)([a-z]+)/)
{
$num++;
$s=sprintf("I%03d$1$3",$num);
print OUT1 "$s\n";
$s=printf("E%03d$2",$num);
print OUT1 "$s\n";

print OUT2 @A,
}
}
百度网友47b071a
2012-10-31 · TA获得超过159个赞
知道答主
回答量:65
采纳率:0%
帮助的人:52.5万
展开全部
很简单,正则表达式匹配进行删除和抓取,之后输出就好了
过程有复杂,不过至少看起来很简单,你自己弄一下吧,
正则表达式网上一大堆教程,你自己学一下好了
追问
我也是自己学了,弄了很久还是编不出来。
帮我写个吧,我会加倍努力的。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式