Perl:读取数组并计算相应的百分位数

Perl:读取数组并计算相应的百分位数,perl,Perl,我试图编写一个perl代码,该代码读取一个包含一系列数字的文本文件,计算并打印出与百分位数对应的数字。我没有访问其他统计模块的权限,因此我希望只使用纯perl编码。提前谢谢 输入文本文件如下所示: 197 98 251 82 51 272 154 167 38 280 157 212 188 88 40 229 228 125 292 235 67 70 127 26 279 .... (and so on) 我的密码是: #!/usr/bin/perl use strict; use war

我试图编写一个perl代码,该代码读取一个包含一系列数字的文本文件,计算并打印出与百分位数对应的数字。我没有访问其他统计模块的权限,因此我希望只使用纯perl编码。提前谢谢

输入文本文件如下所示:

197
98
251
82
51
272
154
167
38
280
157
212
188
88
40
229
228
125
292
235
67
70
127
26
279
.... (and so on)
我的密码是:

#!/usr/bin/perl
use strict;
use warnings;

my @data;

open (my $fh, "<", "testing2.txt")
                         or die "Cannot open: $!\n";
while (<$fh>){
    push @data, $_;
}
close $fh;

my %count;
foreach my $datum (@data) {
    ++$count{$datum};
}

my %percentile;
my $total = 0;
foreach my $datum (sort { $a <=> $b } keys %count) {
    $total += $count{$datum};
    $percentile{$datum} = $total / @data;
    # percentile subject to change
    if ($percentile{$datum} <= 0.10) {   
        print "$datum : $percentile{$datum}\n\n";
    }
}

其中格式为#列表中的数字:#对应的百分位数

要在@data中使用换行符存储数字,只需添加
chomp推送前,或
chomp@data阅读完所有内容后

如果输入文件具有MSWin样式的换行符,请使用
dos2unix
fromdos
将其转换为*nix样式


另外,尝试学习如何缩进代码,这样可以提高可读性。并考虑重命名<代码> $ToS/<代码> <代码> $RunnnIng/<代码>,因为您使用的值随着它的变化而变化。

您的脚本输出与期望的输出有什么不同?它只显示了#对应的百分位注释主题:您可以用
my@data=
@zdim替换
while
-循环。我已经添加了chomp,但是列表中的#数字不会与#对应的percentile@zdim打印和数据似乎不是问题。唯一奇怪的是列表中的#数字没有打印出来,而其他人说它是在他们这边打印出来的。我添加了chomp,但是列表中的#数字仍然没有与#相应的百分比一起打印出来。我来看看输入文件。谢谢。我的原始输入文件来自excel文件(另存为制表符分隔的文件),这可能是问题所在吗?而且我似乎无法使用linux命令转换我的文件。@Sunny:所以在按下之前,请尝试删除代码中的行尾:
s/\xd//g
。另外,您所说的“我似乎无法转换”是什么意思?在“未找到命令”中,转换似乎需要我下载模块或附加组件。
2 : 0.01
3 : 0.01333
4 : 0.01666
6 : 0.02
8 : 0.03
10 : 0.037
12 : 0.04
14 : 0.05
15 : 0.05333
16 : 0.06
18 : 0.06333
21 : 0.07333
22 : 0.08
25 : 0.09
26 : 0.09666