4列の値から最大値、最小値、平均値を求める方法

4列の値から最大値、最小値、平均値を求める方法

私は次のようなデータ構造を持っています。

X   43808504    G   1   ^]. <
X   43808505    C   3   .   4
X   43808506    T   8   .   ?
X   43808507    G   5   .   C

4番目の列から最大値(8)、最小値(1)、平均値(4.25)を取得してファイルに書きたいです。

データの並べ替え後に削除しようとしましたが、これは非効率的なようです。

ご協力ありがとうございます

答え1

使用awk:

awk 'NR == 1 { min = $4; max = $4 }
{
    sum += $4
    if ($4 > max) {
        max = $4
    }
    if ($4 < min) {
        min = $4
    }
} END {
    print max
    print min
    print sum / NR
}' input

minまず、変数を行1列4の値に設定し、後で列4の各値を確認して現在の値より小さいか大きいことを確認maxし、そうである場合は次のように設定します。minmaxminそれ値。

sum次に、列4のすべての値の合計を含む変数を作成します。後で、この変数は合計を行数で割って平均を計算するために使用されます。

最後に、最大値、最小値、平均値を印刷します。

答え2

そしてミラー

$ mlr --nidx --repifs stats1 -a 'min,max,mean' -f 4 data
1 8 4.250000

以下を追加して、一般的な方法で出力をファイルにリダイレクトできます。> file

そしてGNUデータの混合

$ datamash -W min 4 max 4 mean 4 < data
1   8   4.25

関連情報