我想计算Windows上Perl中每行的所有itemsX(其中X是一个数字)的平均值。
我的文件格式为:
id1 item1 cart1 id2 item2 cart2 id3 item3 cart3
0 11 34 1 22 44 2 44 44
1 44 44 55 66 34 45 55 33
想要找到项目块的总和及其平均值。 对此有何帮助?
这是我迄今为止所做的尝试:
use strict;
use warnings;
open my $fh, '<', "files.txt" or die $!;
my $total = 0;
my $count = 0;
while (<$fh>) {
my ($item1, $item2, ) = split;
$total += $numbers;
$count += 1;
}
答案 0 :(得分:0)
对于第一行输入(列名称),我们存储以 item 开头的列的索引。对于每个后续行,我们对从@indices
派生的数组切片引用的列求和。
use strict;
use warnings;
use List::Util qw(sum);
my @indices;
while (<DATA>) {
my @fields = split;
if ($. == 1) {
@indices = grep { $fields[$_] =~ /^item/ } 0 .. $#fields;
next;
}
my $sum = sum(@fields[@indices]);
my $avg = $sum / scalar(@indices);
printf("Row %d stats: sum=%d, avg=%.2f\n", $., $sum, $avg);
}
__DATA__
id1 item1 cart1 id2 item2 cart2 id3 item3 cart3
0 11 34 1 22 44 2 44 44
1 44 44 55 66 34 45 55 33
输出:
Row 2 stats: sum=77, avg=25.67
Row 3 stats: sum=165, avg=55.00