頻度カウント(ソート済みデータ対応)

テキストデータファイルの各データの頻度を数える
あらかじめソート済みのデータに対応

同等のawkプログラムへ

概要

このページ と同様の問題ですが、こちらではあらかじめ ソートが済んでいるデータを処理します。 連想配列というのは 結構難しい(特に変にアセンブラやCなどの低レベル言語に 慣れた人にとっては)ものなので、 こちらのプログラムも使い道はあると思います。

プログラム

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

while(<>) {
	s/[\r\n]//g;

	if ( ( $_ ne $prev ) && ( $prev ne "" ) ) {
		printf( "%s\t%d\n", $prev, $prev_count );
		$prev_count = 0;
	}
	
	$prev_count++;
	$prev = $_;
		
}
printf( "%s\t%d\n", $prev, $prev_count );
exit;

入力データ

既に
鈴木
佐藤
田中
佐藤
鈴木
田中
佐藤
鈴木
鈴木
というファイルが dat7.txt として存在しています。 このままではソートが済んでいないので
c:\perl> sort dat7.txt > dat8.txt
として ソート済みデータ を用意してください。

実行結果

OSはWindowsを利用していると 仮定します。 DOS prompt 上で、
c:\perl> perl c_freq2.pl dat8.txt
とタイプします。
佐藤	3
田中	2
鈴木	4
と出力されるはずです。
メニューに戻る
Tkensaku

TKENSAKU top へ

Copyright © 2004 TKEN