awkファイルを作成するときに列内の範囲を指定する方法は?

awkファイルを作成するときに列内の範囲を指定する方法は?

このようなデータファイルがありますが、awkファイルを作成して整理したいと思います。特定の年齢の平均割合を求めたいです。たとえば、 10<age<2020<age<30。これらの人の平均を計算する方法が見つかりません。どうすればいいですか?

name rate hours age sex
AIDAN 3.5 19 22 M
AMELIA 5.25 16 13 F
NOAH 4.5 24 25 M
ISABELLA 4.25 17 15 F
LIAM 4.5 23 23 M
AVA 5.5 24 25 F
CAYDEN 6 21 28 M

ベストアンサー1

質問を理解したかどうかはわかりません。 2つの結果を得たいですか?

明らかでない場合アケマの答え複数の統計を収集するように拡張できます。

awk '($4 > 10) && ($4 < 20) { c10++; s10+=$2; }
     ($4 > 20) && ($4 < 30) { c20++; s20+=$2; }
     END { if (c10>0) print "average for 10-20:", s10/c10
           if (c20>0) print "average for 20-30:", s20/c20 }' …
  • もちろん、変数を初期化するのは良いプログラミング習慣です。しかし、awk変数をnullに初期化することは、数学的文脈で使用されている場合はゼロのように機能するため、実際には必要ありません。
  • Archemarが指摘したようにprintf。ただし、awkデフォルト値(つまりprintステートメントを実装する方法)は合理的です。
  • Archemarが指摘したように、範囲内に誰もいないとき(ただだけではありません)いいえ報告された平均)。

おすすめ記事