私のデータ構造は次のとおりです。
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
範囲の数を合計し、統計を印刷します。