この質問はこれと非常によく似ています。キーごとにグループ化された平均偏差と標準偏差を取得するにはどうすればよいですか。しかし、私は自分の問題に合うようにそれを変更することができません。
7列のファイル(.csv)がたくさんありますが、最後の3列は次のようになります。
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);