如何用perl中的hash给我的序列文件名称和序列一一赋值
我有一个序列的文件,里面有很多序列,我想用hash给序列的名字和整个序列一一赋值,序列名字是以>开始的,然后跟着序列,综合网友的答案和我自己写的程序,求大神指教...
我有一个序列的文件,里面有很多序列,我想用hash给序列的名字和整个序列一一赋值,序列名字是以>开始的,然后跟着序列,综合网友的答案和我自己写的程序,求大神指教
展开
2个回答
展开全部
#!/usr/bin/perl -w
use strict;
my $filename="seq.txt";
my %id_GC_content; #id=>GC_content
open IN,$filename || die $!;
$/=">";<IN>; # 设置输入记录分隔符为”>”,并去除第一个”>”
while (<IN>){ # $_=<IN>,把序列ID行和序列赋值给$_,$_= 可以省略不写
my $id = $1 if(/^(\S+)/);# 获取序列ID
chomp; # 去掉末尾的”>”
s/^.+?\n//;# 删除第一行
s/\s//g; # 删除序列中的空白字符
my $GC = (tr/GC/GC/);#计算G或C碱基个数
my $AT = (tr/AT/AT/);#计算A或T碱基个数
my $len = $GC + $AT;# 计算序列非N长度
my $gc_cont = $len ? $GC / $len : 0; #计算GC含量,如果长度为0,GC含量算0
$id_GC_content{$id}=$gc_cont; #id=>GC_content
}
$/="\n";# 把输入记录分隔符改为默认值
close IN; # 关闭输入文件句柄
my @sort = sort{$id_GC_content{$b} <=> $id_GC_content{$a}} keys(%id_GC_content);
print $sort[0];
use strict;
my $filename="seq.txt";
my %id_GC_content; #id=>GC_content
open IN,$filename || die $!;
$/=">";<IN>; # 设置输入记录分隔符为”>”,并去除第一个”>”
while (<IN>){ # $_=<IN>,把序列ID行和序列赋值给$_,$_= 可以省略不写
my $id = $1 if(/^(\S+)/);# 获取序列ID
chomp; # 去掉末尾的”>”
s/^.+?\n//;# 删除第一行
s/\s//g; # 删除序列中的空白字符
my $GC = (tr/GC/GC/);#计算G或C碱基个数
my $AT = (tr/AT/AT/);#计算A或T碱基个数
my $len = $GC + $AT;# 计算序列非N长度
my $gc_cont = $len ? $GC / $len : 0; #计算GC含量,如果长度为0,GC含量算0
$id_GC_content{$id}=$gc_cont; #id=>GC_content
}
$/="\n";# 把输入记录分隔符改为默认值
close IN; # 关闭输入文件句柄
my @sort = sort{$id_GC_content{$b} <=> $id_GC_content{$a}} keys(%id_GC_content);
print $sort[0];
追问
您好,谢谢您的回答,但我还有个疑问想咨询
>bac_165
AAAAAACAACCTCTCTACCTGTTC
>bac_173
AAAAAACAGACTGCAGTTGACGAT
如何编写一个perl程序,用&key来存序列的名称,然后用&value来存序列本身,然后放在hash里面。如何装在hash里面,让key和value对应。我不是太会,头都大了。谢谢您~~如果您有空的话
展开全部
那你即是想看到甚麼 ? 请举例!
更多追问追答
追问
我想写一个程序,读取这个seq.txt的序列文件,然后用hash把序列名称和序列一一对应起来,计算gc值含量最高的一条,然后输出这条序列的名称
追答
哈! 我只是个懂 perl 的人, 你那一堆东西对我来说都是字串! 所以我既不懂甚麼为之 "gc 值", 也不知从那到那为之一个 "序列", 又从那到那为之 "名称", 你能不能举个例, 例如你想 $seq{???} 里装的是 "...." ? 或者你可否像这个人的方式提问 : http://zhidao.baidu.com/question/1701200634915153740
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询