Этот вопрос очень похож на этот Как я могу сгруппировать среднее и стандартное отклонения по ключам? но мне не удается изменить их в соответствии с моей проблемой.
У меня много файлов (.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. Я хочу напечатать это среднее значение рядом со строкой (в столбце 8), которая содержит 3 в столбце 6 (столбец 6). Обратите внимание, что значение в столбце 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);