我们在处理数据中, 有时候需要统计一些数据的次数 ,以及占总长度的比例。 一般情况下, 需要计数的情景, 我们往往第一时间想到的应该就是哈希, 哈希是最适合来进行频率统计的方法了。
我们来看下面的例子:
我们有一个文件,data.txt,它里面有以下内容
>abc
TGCGACGAGGGCA
我们需要统计GC的次数以及占第二行数据的比例。
我们来看怎么进行处理:
首先我们读取文件
my $file = 'data.txt';
open my $fh, '<', $file or die "failed to open file:$file\n";
定义2个变量用来存储gc的个数,以及总长度
my $count = 0;
my $total = 0;
逐行读入数据
while(<$fh>){
过滤掉>开头的行
next if /^>/;
chomp;
my @vals = split '';
for my $vals(@vals){
$total++;
这边如果只是gc, 使用eq效率会比正则高, 一般只有少数选项的时候, 我们可以考虑直接使用比较, 而不是使用正则
$count++ if $vals eq 'G' || $vals eq 'C';
}
}
定义一个变量, 用来计算并存储gc所占的比例, 我们这边使用的是百分比, 因此需要乘以100, 如果对小数位有特定要求, 则后续可以自己format一下就可以了
my $ratio = $count * 100 / $total;
print "GC number: $count, total: $total, ratio: $ratio % \n";
这样就可以了,是不是很简单。
文章转载自EasyPerl,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




