我有一个相当愚蠢的问题。
输入数据:
No:20 2.23 5.5 101 404 26.3
No:01 2.40 5.3 100 404 25.7
No:02 2.30 5.6 100 405 25.4
No:03 2.39 5.3 100 404 25.5
No:07 2.61 4.9 100 404 25.4
No:08 2.53
No:09 2.41 5.4 101 404 25.4
No:10 2.59 5. 100 404 25.4
No:11 2.55 5.4 101 404 25.3
No:12 2.3 5.3 100 404 25.5
No:13 2.47 5.2 100 404 25.
No:14 2.25 5.1 100 404 25.6
No:15 2.24 5.1 100 404 25.7
No:17 2.57 5.0 100 404 25.5
No:18 2.45 5.2 101 404 25.5
No:04 2.51 5.5 100 404 25.4
No:05 2.38 5.1 101 405 25.5No:04 2.51 5.5 100 404 25.4
No:06 2.29 5.1 100 405 25.3
No:07 2.53 4.9 100 404 25.4
No:08 2.41 5.2 100 404 25.5
No:07 2.46 4.9 100 404 27.6
No:05 2.23 5.1 100 404 25.0��
o:09 2.39 5.3 100 404 26.4
No:01 2.49 5.3 101 404 26.8
No:02 2.21 5.5 101 404 26.2
______________________________________以及更多
我希望平均线元素的每一百个结束。
#!usr/bin/perl
use utf8;
while(<>){
if(/^No:\d{2}\s{3} \d\.\d{2}s{4} \d\.\d\s{3} \d{3}s{3} \d{3}s{3} \d{2}\.\d\s$/x){
chomp;
push @Array,[split/\s+/];
}
}
foreach (0..$#Array/100){
my $average=0;
$average += $Array[$_][5]/100 foreach($_..$_+100);
print "this is $average \n";
}
输出(平均值)
23.836
26.5630000000001
26.462
26.462
26.361
26.462
26.5630000000001
29.694
26.664
26.967
**使用MS Excel **
25.9530
25.4850
25.7610
25.3160
25.1650
25.7060
25.9500
25.6800
25.4720
25.4820
答案 0 :(得分:0)
您正在错误地查看数据。在你的第一次传球你看0-99的值,然后在第二次传球你看1-100,然后2-101,等等。听起来你想做0-99然后100-199等等你可以做类似的事情:
my $chunks = $#Array / 100;
foreach my $chunk (0 .. $chunks) {
my $low = 100 * $chunk;
my $high = $low + 100;
$high = $#Array if $high > $#Array;
my $sum = 0;
foreach my $n ($low .. $high) {
$sum += $Array[$n][5];
}
my $avg = $sum/($high - $low);
print "avg=$avg\n";
}