データ列内の範囲の最大値、平均値、最小値

データ列内の範囲の最大値、平均値、最小値

私のデータ構造は次のとおりです。

X   43808873    A   14
X   43808874    G   7
X   43808875    T   15
X   43808876    A   13
X   43808877    T   4
X   43808878    C   13
X   43808879    T   11
X   43808880    C   8
X   43808881    T   3
X   43808882    C   14
X   43808883    T   15
X   43808884    C   15

4列の最大値、最小値、および平均を計算できるようにしたいが、特定の範囲(43808877-43808882など)内でのみ可能です。

この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
   }' file

ベストアンサー1

一方通行:

sort -k4n,4 file | awk '$2>=43808877 && $2<=43808882{tot+=$4;cnt++;max=$4;min=cnt==1?$4:min}END{print min, max,tot/cnt}'

まずsort、最初のレコードが最小値を持ち、最後のレコードが最大値を持つようにファイルを4列に配置します。を使用してawk範囲の数を合計し、統計を印刷します。

おすすめ記事