这个问题与这个问题非常相似如何获得按键分组的平均值和标准偏差?但我没有设法修改它以适应我的问题。
我有很多包含 7 列的文件 (.csv),最后三列如下所示:
col5,col6,col7
1408,1,123
1408,2,234
1408,3,345
1408,4,456
1408,5,567
1408,6,678
1409,0,123
1409,1,234
1409,2,345
1409,3,456
1409,4,567
1409,5,678
1409,6,789
...
N,0,123
N,1,234
N,2,345
N,3,456
N,4,567
N,5,678
N,6,789
我想要做的是计算在第 5 列 (col5) 中具有相同值的所有值的最后一列 (col7) 的平均值,所以 1408、1409、1410,... 直到 N 并且我没有知道 N。我想在第 6 列(col6)中包含 3 的行(在 col8 中)旁边打印这个平均值。请注意,第 6 列(col6)中的值从 0 到 6,但文件的第一个数字并不总是 0。所以我想要的是:
col1,col2,col3,col4,col5,col6,col7,col8
bla,bla,bla,bla,1408,3,345,400.5
bla,bla,bla,bla,1409,3,456,456
...
bla,bla,bla,bla,N,3,456,456
我有一些脚本可以用来计算平均值,但我必须能够将我的值放入一个数组中。以下是我尝试做的,但它不起作用。另外,我只是想自己学习 Perl,所以如果它看起来像垃圾,我只是在尝试!
open (FILE, "<", $dir.$file) or die;
my @lines = <FILE>;
foreach my $line(@lines) {
my ($col1,$col2,$col3,$col4,$col5,$col6,$col7) = split(/\,/, $line);
push @arrays5, $col5;
}
foreach my $array5(@arrays5) {
foreach my $line(@lines) {
my ($col1,$col2,$col3,$col4,$col5,$col6,$col7) = split(/\,/, $line);
if ($array5 == $col5) {
push @arrays7, $col7;
}
}
}
close(FILE);