全プログラム

全プログラム

dataset.csv7つの数値列を含む大容量データファイルがあります。 AWKが各列の平均と分散を計算する最も速く効率的な方法であることを読んだ。 CSVファイルを繰り返して結果を要約CSVに出力するには、AWKコマンドが必要です。データセットの例:

1   1   12  1   0   0   426530
1   1   12  2   0   0   685455
3   4   12  3   1   0   1182080
1   1   12  4   0   1   3090
2   1   13  5   0   0   386387
1   3   12  6   0   2   233430
3   1   11  7   1   0   896919
1   1   12  8   0   0   16441

生成された要約csvは次のとおりです。最初の行は各列の平均に対応し、2番目の行は分散(サンプルベース)です。

1.625   1.625   12  4.5 0.25    0.375   478791.5
0.839285714 1.410714286 0.285714286 6   0.214285714 0.553571429 1.74812E+11

単一の列値を計算できましたが、すべての列に対して繰り返すにはこの値が必要です。

awk -F' ' '{ total += $1 } END {print total/NR}' dataset.csv > output.csv

ベストアンサー1

すべての列にループが必要です

{ for(i=1;i<=NF;i++) ...

そして配列

... total[i]+=$i ; sq[i]+=$i*$i ; }

その結果、(平均的に)同様のコマンドラインが生成されます。

awk '{ for(i=1;i<=NF;i++) total[i]+=$i ; } 
    END { for(i=1;i<=NF;i++) printf "%f ",total[i]/NR ;}' 

全プログラム

平均と分散を計算するためにawkを使用しましたが、結果は得られませんでした。

 { for(i=1;i<=NF;i++) {total[i]+=$i ; sq[i]+=$i*$i ; } }
END {

   for(i=1;i<=NF;i++) printf "%f ",total[i]/NR ;
   printf "\n" ;
   for(i=1;i<=NF;i++) printf "%f ",sq[i]/NR-(total[i]/NR)**2 ;
   printf "\n" ;
}

おすすめ記事