Let's GAWK! とにかく使うJGAWK その22

 皆さん こんにちわ

 まず、この手術台帳データを扱うには、必ずFSを指定しないといけません。タブならば FS="\t" カンマならば FS="," です。これをBEGINパターンでセットします。

  BEGIN{FS="\t"}   # セパレータがタブの場合。カンマならば FS=","と指定。

 以下のスクリプトは、タブがセパレータであることを想定しています。
 まずは男女別集計です。$10に注目して、こんなスクリプトは如何?

  BEGIN{FS="\t"}
  {$10 ~ /男/ ? ++man : ++woman}
  END{printf("男女別集計\n男性 %d人\n女性 %d人\n",man,woman)}

 注目するフィールドを36に変えれば、疾患の良悪性に注目した集計ができます。

  BEGIN{FS="\t"}
  {$36 ~ /良/ ? ++benign : ++malignant}
  END{printf("良悪性別集計\n良性 %d人\n悪性 %d人\n",benign,malignant)}

 年齢の平均を出します。男女別にしましょうか。

  BEGIN{FS="\t"}
  {$10 ~ /男/ ? ++man : ++woman}
  {$10 ~ /男/ ? nen_man += $9 : nen_woman += $9}
  {nenrei += $9}
  END{printf("平均年齢 %.2f歳\n",nenrei/NR);
      printf("    男性 %.2f歳\n",nen_man/man);
      printf("    女性 %.2f歳\n",nen_woman/woman)}

 診療科別・所属別集計です。診療科や所属がいろいろあってもいいように、連想配列を使ってみましょう。このテクニックは医師別集計でも使えます。

  BEGIN{FS="\t"}
  {++sinryouka[$11]}
  {++syozoku[$12]}
  END{print "診療科別集計";
      for(i in sinryouka){
          print i,sinryouka[i];}
      print "";
      print "所属別集計";
      for(i in syozoku){
          print i,syozoku[i];}
  }

 興味のある方は、お問い合わせください。もとのデータが配布できると思います。
 また、面白い集計の例を教えてください。対応するスクリプトをご用意いたします。



 初出 NIFTY-Serve「みんみんネット」1996/09/28 (Sat) 20:16:56