perl计算每行长度和里面的AUCG
答案:1 悬赏:80 手机版
解决时间 2021-11-09 18:50
- 提问者网友:饥饿走向夜
- 2021-11-09 12:35
perl计算每行长度和里面的AUCG
最佳答案
- 五星知识达人网友:千杯敬自由
- 2021-11-09 13:52
输出的描述不确切,不清楚是否长度相同的行里,AUCG是单独统计还是合计。下面的程序按合计来处理。
#!/usr/bin/perl
use strict;
my %hash;
open FILE,"aucg.txt";
foreach my $line ()
{
# 忽略以>开头的行
next if ($line =~ /^>/);
# 去除回车换行符
chop($line) if ($line =~ /[
]$/);
my $len = length($line);
# 行数+1
$hash{$len}->{num} ++;
# 分别计数
$hash{$len}->{A} += &count($line, 'A');
$hash{$len}->{U} += &count($line, 'U');
$hash{$len}->{C} += &count($line, 'C');
$hash{$len}->{G} += &count($line, 'G');
}
close FILE;
# 按长度排序输出
foreach my $n (sort keys %hash)
{
print "长度为$n共有$hash{$n}->{num}:
";
print " A: $hash{$n}->{A}
";
print " U: $hash{$n}->{U}
";
print " C: $hash{$n}->{C}
";
print " G: $hash{$n}->{G}
";
print "
";
}
# 统计字符在字符串中出现的次数
sub count
{
my ($line,$c) = @_;
my $num = 0;
my $len = length($line);
# 将字符串拆分为数组
my @str = split(//, $line);
for (my $i=0; $i<$len; $i++)
{
($str[$i] eq $c) and ($num++);
}
return $num;
}追问你好,最后怎么以下列的形式输出到文件里去?
长度 A T C G 总数
18
19
20
21
22
23
24
25
#!/usr/bin/perl
use strict;
my %hash;
open FILE,"aucg.txt";
foreach my $line (
{
# 忽略以>开头的行
next if ($line =~ /^>/);
# 去除回车换行符
chop($line) if ($line =~ /[
]$/);
my $len = length($line);
# 行数+1
$hash{$len}->{num} ++;
# 分别计数
$hash{$len}->{A} += &count($line, 'A');
$hash{$len}->{U} += &count($line, 'U');
$hash{$len}->{C} += &count($line, 'C');
$hash{$len}->{G} += &count($line, 'G');
}
close FILE;
# 按长度排序输出
foreach my $n (sort keys %hash)
{
print "长度为$n共有$hash{$n}->{num}:
";
print " A: $hash{$n}->{A}
";
print " U: $hash{$n}->{U}
";
print " C: $hash{$n}->{C}
";
print " G: $hash{$n}->{G}
";
print "
";
}
# 统计字符在字符串中出现的次数
sub count
{
my ($line,$c) = @_;
my $num = 0;
my $len = length($line);
# 将字符串拆分为数组
my @str = split(//, $line);
for (my $i=0; $i<$len; $i++)
{
($str[$i] eq $c) and ($num++);
}
return $num;
}追问你好,最后怎么以下列的形式输出到文件里去?
长度 A T C G 总数
18
19
20
21
22
23
24
25
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯