複数ファイルの平均と標準偏差

複数ファイルの平均と標準偏差

3000 個のファイル (1.out、2.out、3.out...) があり、各ファイルには次の列があります。

0.446477
0.439331
0.444394
0.425003
0.428981
0.419547
0.432834
0.417874
........

3000ファイルの各行の平均と標準偏差を計算する必要があります。以下を使用して平均を計算できます。

awk '{a[FNR]+=$1;b[FNR]++;}END{for(i=1;i<=FNR;i++)print a[i]/b[i];}' *.out

しかし、標準偏差を計算するのをやめました。

ベストアンサー1

複雑なソリューションの使い方生地コマンドとデータ混合ツール:

  1. さらなる処理のために、すべてのファイルを1つのファイルに結合します。

    paste [0-9]*.out | datamash transpose > data
    

    -- datamash transpose- 行を列に置き換えます。

  2. 合計フィールド数を取得します。

    nf=`awk '{print NF; exit}' data`
    
  3. 平均と標準偏差を計算します。

    for ((i=1; i<$nf; i++)); do datamash mean $i pstdev $i < data; done 
    

出力は次のとおりです(最初の列 - 平均、2番目の列 - 標準偏差値)。

0.596477    0.11180339887499
0.589331    0.11180339887499
0.594394    0.11180339887499
0.575003    0.11180339887499
0.578981    0.11180339887499
0.569547    0.11180339887499
0.582834    0.11180339887499
.......

おすすめ記事