Macで使う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