独自の列SDに基づいてファイルから行を削除する方法は?

独自の列SDに基づいてファイルから行を削除する方法は?

独自のSDに基づいてファイルから行を削除する必要がある問題があります。私はawkを試しましたが、まだ知っていません。

入力ファイルは次のとおりです。

A x 50
B y 100
C q 34
D ua 80

まず、3番目の列の平均と標準偏差を計算したいと思います。次のコマンドを使用して計算できます。

awk '{s+=$3; ss+=$3^2} END{print mean=s/NR, SD=sqrt(ss/NR-m^2)}' file

しかし、SDに基づいて行をさらに削除したいと思います。たとえば、平均より 0.5SD 高い行だけが必要な場合は、次のようになります。

awk '$3 > m + 0.5*n' file > fileout

これら2つのawkを1つに接続する方法はありますか?そうでなければ他の方法はありませんか?

とても感謝しています!

ベストアンサー1

$ awk 'NR==FNR{ s+=$3; ss+=$3^2; nr=NR; next }
       FNR==1 { mean=s/nr; sd=sqrt(ss/nr-mean^2) }
       $3> mean+(0.5*sd)' infile infile
B y 100
D ua 80

おすすめ記事