頻度カウント(一般データ対応)

テキストデータファイルの各データの頻度を数える
一般のデータファイルに対応

同等のperlプログラムへ

概要

アンケート結果の集計のように、同一のデータの数を数え上げる という処理はしばしば必要になります。 数え上げる方法には何通りか考えられますが、 まずawkの特徴(連想配列)を利用して、任意のデータファイル に対応できるプログラムを作ります。

プログラム

プログラムは以下のようになります。 エディタを開き以下をタイプして、適当な名前でセーブしてください。ここでは c_freq1.awk という名前でセーブしたことにして話を進めます。

BEGIN {
	count = 0;
}
{
	if ( DATA[$0] == 0 ) {
		DATA_NAME[count] = $0;
		count++;
	}

	DATA[$0]++;
}
END {
	for ( i = 0; i < count; i++ ) {
		printf( "%s\t%d\n", DATA_NAME[i], DATA[DATA_NAME[i]] );
	}
}

入力データ

鈴木
佐藤
田中
佐藤
鈴木
田中
佐藤
鈴木
鈴木
というファイルが dat7.txt として存在するとします。

実行結果

ここでは、awk処理系としてgawkを利用し、 また、OSはWindowsを利用していると 仮定します。 DOS prompt 上で、
c:\awk> gawk -f c_freq1.awk dat7.txt
とタイプします。
鈴木	4
佐藤	3
田中	2
と出力されるはずです。

このような連想配列をawkで使うときには、 このプログラムのように自分でデータ名を 管理するのではなくinオペレータを用いて、

	name in DATA
の形式を使うほうがスマートだとされています。 しかし、この方法ですと(出現した)順序が保たれませんし、 連想配列のない一般の言語への移植(自分でhashtableを作る) する場合のことを考え、このプログラムはあえてこうしています。


メニューに戻る
Tkensaku

TKENSAKU top へ

Copyright © 2004 TKEN