求助:根据第一行seqID提取第二行的序列数据,求可实现的perl程序

有fasta文件如下:>leaf_1AAGACCATTCGAGCTTATCTCTTC>leaf_2ATGGAGAAGGAAATGAAGAGCAGT>leaf_3TGGCT... 有fasta文件如下:

>leaf_1
AAGACCATTCGAGCTTATCTCTTC
>leaf_2
ATGGAGAAGGAAATGAAGAGCAGT
>leaf_3
TGGCTGTAAGTCATACCTGTCA
>leaf_4
CGCGGAGTAGATCAGTTTGGTA
>leaf_5
AGTAACGGCTTTACAAGAATCAAA
......

现在有另一个txt文件,包含我想提取的序列的名称:
>leaf_2
>leaf_4
>leaf_5

能否用perl程序实现如下功能:
根据序列名称提取数据库里的相应序列信息,输出到新文件中并以制表符分隔的格式显示,如下:

>leaf_2 ATGGAGAAGGAAATGAAGAGCAGT
>leaf_4 CGCGGAGTAGATCAGTTTGGTA
>leaf_5 AGTAACGGCTTTACAAGAATCAAA

谢谢!
我试了,但回车后没出任何结果。
你程序第三行的<IDlist.txt> <seq.fa>是不是需要做相应的改动?假设我需要查询的列表名leaf_query.txt,数据库文件名为leaf.fa
命令行输入:perl run.pl leaf_query.txt leaf.fa > leaf_result.txt
结果生成了相应文件,但文件是空的。是不是需要在程序中加入:
open (OUTPUT, ">Output.fa");
...print OUTPUT ">fruit_$._$line[0]_$line[1]\n"; 等语句?

你能否用我问题里的例子(包括文件名)再调试一下程序?谢谢!
展开
 我来答
laohu2862
2013-05-23 · TA获得超过1246个赞
知道小有建树答主
回答量:557
采纳率:0%
帮助的人:643万
展开全部
#!/usr/bin/perl -w
use strict;
die "perl $0 <IDlist.txt> <seq.fa>\n" unless(@ARGV == 2);
my %hash;
open IN,$ARGV[0];
while(<IN>){
chomp;
$_=~s/[> \t]+//g;
$hash{$_} = 1;
}
close IN;
open IN,$ARGV[1];
$/=">";
<IN>;
$/= "\n";
while(<IN>){
chomp;
my $name = $_;
$/=">";
my $seq= <IN>;
chomp $seq;
$seq =~s/\n//g;
$/ = "\n";
if(exists($hash{$name})){
print ">$name\t$seq\n";
}
}
close IN;

脚本保存为run.pl 序列所在文件假设为 a.fa 你所需要的ID列表所在文件为ID.txt
那么在命令行输入perl run.pl ID.txt a.fa 回车即可
结果将在屏幕打印出来。如果需要另存 则假设你另存为 c.txt
那么命令行输入
perl run.pl ID.txt a.fa > c.txt
追问
我现在能保证我的数据库fa文件格式是正确的,所以怀疑问题出在了我的lst文件的格式上面。因为这个lst文件是我从Excel(Mac2011版)里的一列数据拷贝粘贴到写字板里生成的,很有可能产生了隐含的格式错误。我尝试用^n替换^p,也还是无济于事 : (
请问如何解决这个问题?怎样能够把Excel里的一列数据转换成正确的fasta格式输出呢?
追答
你这个是因为从EXCEL存出来的数据,它包含的换行符为\r\n,这样的话就会导致换行的失败,\r是将光标移动到行首,针对你的这个格式,可以尝试在里面替换一行代码再试试:

$_=~s/[> \t]+//g; 这一句 替换为

$_=~s/[> \t\r]+//g;
百度网友09011f0
2013-05-24 · TA获得超过523个赞
知道小有建树答主
回答量:962
采纳率:0%
帮助的人:663万
展开全部
open FASTA,$ARGV[0];
open LST,$ARGV[1];
while(<LST>){
chomp;
$id{$_}++;
}
while(<FASTA>){
chomp;
$name=$_;
chomp($seq=<FASTA>);
if (exists $id{$name}){
print "$name\t$seq\n";
}
}

perl aaa.pl fa txt > answer
更多追问追答
追问
谢谢您的回答,我试了但没有任何结果输出,什么原因呢?
追答


check一下 你的文件跟你放上来的是否一致 

我这里可以正确的输出结果。

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式