Perl:查找特定列的总和和平均值

时间:2016-02-11 06:50:11

标签: perl

我想计算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;
}

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