Awk
使用 AWK 計算列的均值和變異數
我有一個
dataset.csv
包含 7 個數字列的大型數據文件。我已經讀過 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 如下所示。第一行對應每列的平均值,第二行是變異數(基於樣本)。
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
您將需要一個循環到所有列
{ 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" ; }