这个问题与这个问题非常相似How can I get the average and standard deviations grouped by key?但我无法修改它以适应我的问题。计算列的小部分的平均值,按perl键分组?
我有很多的文件(.CSV)与7列,最后三列是这样的:
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
我想要做的是计算最后一列的平均值(COL7)对于在第5列(col5)中具有相同值的所有值,所以1408,1409,1410,...直到N和我不知道N.我想在该行旁边打印该平均值(在col8中)在第6列(col6)中包含3。请注意,在第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);
请问$ tmp_line是什么? – thb 2012-04-26 12:12:32
另外,你的意思只是忽略第1至第4列? – thb 2012-04-26 12:14:20
$ tmp_line是一个错误,现在纠正它。我不需要第1 - 4列来计算平均值,但我最终还是要打印它们,我会在我的问题中纠正它! – Nuttieke 2012-04-26 12:17:43