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

 みなさん こんにちわ

 突然医学対から作文を頼まれてしまい、ここ数日「Macで使うjgawk」と「なぜJGAWKなのか」がサポートできなくなっていました。

 ここまで来たからには、とにかく「連想配列」と「正規表現」をやっておかねば悔いが残る。というわけで「その16」をお届けします。

連想配列

 はじめの時にテストの点数表の処理をしました。その後、さらに何回かテストがあって、現在一覧表はこうなっています。フィールドは氏名、各教科の点数(国語、算数、理科、社会の順)です。

織田信長 84 88 80 75
豊臣秀吉 63 66 60 78
徳川家康 80 78 70 90
織田信長 64 78 88 57
徳川家康 78 67 67 89
豊臣秀吉 56 76 70 88
豊臣秀吉 66 56 76 68
織田信長 94 98 90 85
徳川家康 70 68 60 80
豊臣秀吉 68 86 68 86
織田信長 74 78 70 65
徳川家康 90 88 80 80
豊臣秀吉 86 68 78 96

 ここで、各人の各科目の平均点を求めることを考えましょう。
 実は、これまでに説明したことだけを使っても、この目的のためのスクリプトは作れます。例えば、織田信長君の各教科の平均点は、以下のスクリプトで計算できます。

  $1 == "織田信長"{name_oda = $1;
                   kokugo_oda += $2;
                   sansu_oda += $3;
                   rika_oda += $4;
                   syakai_oda += $5;
                   ++kaisu_oda;
                   }
  END{printf("%sの国語の平均点は %.2f点です\n",name_oda,kokugo_oda/kaisu_oda);
      printf("%sの算数の平均点は %.2f点です\n",name_oda,sansu_oda/kaisu_oda);
      printf("%sの理科の平均点は %.2f点です\n",name_oda,rika_oda/kaisu_oda);
      printf("%sの社会の平均点は %.2f点です\n",name_oda,syakai_oda/kaisu_oda);
     }

 全部のひとの平均点をだすには、パターンと変数の名前を変えたコードを並べて書けばOKです。しかし、いかにも冗長ですね。こういう場合、世の多くのプログラミング言語同様、awkでも配列を使います。

 配列というのは、同じ種類の変数に添字を付けて区別できるようにする機能です。普通の言語では、添字には数字を使います。例えば、kokugo_odaの代わりにkokugo[1]のようにします。

 配列を使ったスクリプトの例は次発言で。



 初出 NIFTY-Serve「みんみんネット」1996/09/27 (Fri) 14:04:38