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

 みなさん こんにちわ
 その5のつづきです。

 前回の最後のスクリプトはぽつんと「2」と表示されるだけでした。これではあんまりなので、少し集計らしくしましょう。今回はスクリプトをyabyax形式で貼り付けてみました。cut hereの線で切って中身だけ別ファイルにしてください。

----------^ TEST.AWK ( date:96-09-12 time:19:32 ) ----------< cut here
BEGIN{FS=","}
$5 == "M"{++man}
$5 == "F"{++woman}
($6 >= 30) && ($6 < 40){++thirty}
$6 > 50{++fifty}
END{printf("簡単な集計の例\n\nこのデータには\n");
    printf("    男性     %d人\n",man);
    printf("    女性     %d人\n",woman);
    printf("    30代     %d人\n",thirty);
    printf("    50代以上 %d人\n",fifty);
    printf("の受診者が含まれます。\n");
}
----------$ TEST.AWK ( lines:12 ) --------------------------< cut here

 出力はこうなります。

簡単な集計の例

このデータには
    男性     2人
    女性     3人
    30代     2人
    50代以上 3人
の受診者が含まれます。

 書式的には目新しいものはありません。&& は論理演算子で「〜かつ(and)〜」の意味です。「〜または(or)〜」は || です。このように使えばある値とかある範囲の数値をとるデータを簡単に抽出できます。例えば肝機能異常者のリストなどは簡単に作れますよ。

 前回端折ったのでprintfについて少し補足します。

 printf("文字列や書式制御文字列",変数,変数,...)というのが一般的な書式です。" "の中の文字はそのまま印字されます。変数の値を印字したいときは書式制御文字列を入れます。言葉だとわかりにくいので例を示します。

  printf("Hellow world!\n") --> Hellow world!
                       ^^改行はこのように指定する。

  name="ハッシー";
  printf("Hellow %s\n",name) --> Hellow ハッシー
                 ^^    ^^^^%sの部分に変数の内容が出力される。%sは文字
                           列として出力することを意味する。
  age=35
  printf("AGE %d は怖いドラマだ\n",age) --> AGE 35 は怖いドラマだ
              ^^                   ^^^%dは出力データ形式が整数であるこ
                                      とを意味する

他にもいろいろな書式指定の方法がありますが、また必要になったところで取り上げます。


 パターンには、式を併記するやり方や式として正規表現を書くやり方がありますが、話がマニアックになってくるので後に回します。
 次回はアクションactionで使うさまざまな制御構造について話します。



 初出 NIFTY-Serve「みんみんネット」1996/09/12 (Thu) 21:22:27