Perl:读取数组并计算相应的百分位数
我试图编写一个perl代码,该代码读取一个包含一系列数字的文本文件,计算并打印出与百分位数对应的数字。我没有访问其他统计模块的权限,因此我希望只使用纯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
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