所以我一直在研究这个perl脚本,它将分析和计算不同行空间中的相同字母。我已经将计数实现为哈希,但我在排除" - "来自此哈希的输出结果的字符。我尝试使用删除命令或下一个if,但我没有摆脱输出中的 - count。
所以这个输入:
@extract = ------------------------------------------------------------------MGG-------------------------------------------------------------------------------------
以下代码:
#Count selected amino acids.
my %counter = ();
foreach my $extract(@extract) {
#next if $_ =~ /\-/; #This line code does not function correctly.
$counter{$_}++;
}
sub largest_value_mem (\%) {
my $counter = shift;
my ($key, @keys) = keys %$counter;
my ($big, @vals) = values %$counter;
for (0 .. $#keys) {
if ($vals[$_] > $big) {
$big = $vals[$_];
$key = $keys[$_];
}
}
$key
}
我希望最常见的元素是G,与输出相同。如果元素中存在平局,比如G = M,如果有一种方法可以显示两者,那将是很好但不是必需的。有关如何删除或删除' - '的任何提示非常感谢。我正在慢慢学习perl语言。
如果我要问的不清楚或者是否需要更多信息,请告诉我,再次感谢所有评论。
答案 0 :(得分:2)
foreach my $extract(@extract) {
#next if $_ =~ /\-/
此处 $ extract 会禁止 $ _ 设置。
(在这种情况下,$ _保持上面的值,例如例程参数列表,上一个匹配等)
此外,您可以使用字符类来提高可读性:
next if $extract=~/[-]/;
答案 1 :(得分:2)
您的数据并不完全有意义,因为它实际上并不是perl代码。我猜它是一个分成字符的字符串。之后,听起来你只是希望能够找到最高频率的字符,这实际上只是sort
降序计数。
因此,下面演示了如何计算字符数,然后对结果进行排序:
use strict;
use warnings;
my $str = '------------------------------------------------------------------MGG-------------------------------------------------------------------------------------';
my @chars = split '', $str;
#Count Characteres
my %count;
$count{$_}++ for @chars;
delete $count{'-'}; # Don't count -
# Sort keys by count descending
my @keys = sort {$count{$b} <=> $count{$a}} keys %count;
for my $key (@keys) {
print "$key $count{$key}\n";
}
输出:
G 2
M 1