忘れないようにメモっとく

機械学習とかプログラミングとか。

awkで列方向に集計する。

合計、平均、分散、標準偏差

列方向の集計やりづらいなって思ってたけど、for (i=1;i<=NF;i++)使って楽チン。

集計するファイル↓↓

hoge.txt

840 394 783 798
911 197 335 768
277 553 477 628
364 513 952 916

awkファイル↓↓

sum.awk

BEGIN {
    print "sum", "ave", "var", "std"
}
{
    sum=0;
    for (i=1;i<=NF;i++){
        sum+=$i
    };
    ave=sum/NF;
    varTemp=0;
    for (i=1;i<=NF;i++){
        varTemp+=($i-ave)^2
    };
    var=varTemp/NF;
    std=sqrt(var);
    print sum, ave, var, std
}

スクリプトの実行と結果。

awk -f sum.awk hoge.txt

sum ave var std
2815 703.75 32418.2 180.051
2211 552.75 87162.2 295.232
1935 483.75 17098.7 130.762
2745 686.25 64317.2 253.608