さて、私が好んで多用する連想配列のお話です。
AWKの配列変数は連想配列しか搭載していません。何故ならAWKのデータ型は基本的に文字列だけだからです。AWK内部では、数値は数字の文字列として扱われます。
それでは、連想配列のお話の始まり始まりぃ〜〜〜
・・・と言っても、連想配列の詳細な説明をここでお話しするつもりはありません。私がいつも使っている手法をご紹介します。
その手法とは・・・
多くのテキストデータから幾つかのキーワードの出現頻度を集計する方法をご紹介いたします。
仮想のデータ処理では説明しにくいので、ここでは気象協会の地震データから震源地別マグニチュード別の地震発生頻度集計を例とします。
「気象協会の地震データ」とは、こちらのサイトから得た地震発生日時ごとのデータとします。
私は、表示したページをコピペして、地震発生日時ごとにファイルに保存しました。
それらのファイルの一部に以下のような箇所があります。
発生時刻 6月20日 1時31分
震源地 福島県沖
位置 緯度 北緯37.5度
経度 東経141.4度
震源 マグニチュード M3.6
深さ 約20km
BEGIN {
# 連想配列に全てのファイルの震源地とマグニチュードを集計する
for (i = 1; i <= f_num; i++) { # ファイルごと読込ループ
while (getline < arr[i] > 0) { # ファイル内行読み込みループ
sin = …; # 震源地切出し
mag = …; # マグニチュード切出し
arr[sin "," mag]++; # 配列変数に集計(震源地とマグニチュードをカンマで連結)
}
}
# 集計データをファイル出力
for (str in arr) { # 配列変数から集計内容を読みだすループ
printf("%s,%d\n", str, arr[str]) > out_file; # 震源地、マグニチュード、頻度をファイル出力
}
}
茨城県沖,3,42
茨城県沖,4,138
茨城県沖,5,78
茨城県沖,6,23
茨城県沖,7,3
茨城県南部,3,34
茨城県南部,4,28
茨城県南部,5,8
茨城県北部,2,1
茨城県北部,3,71
茨城県北部,4,63
茨城県北部,5,12
茨城県北部,6,2