レコード連結

複数行からなるデータを一つのレコードとしてまとめる
(要素数が固定の場合)

同等のperlプログラムへ

概要

awkで処理するにしろ、表計算ソフトを使うにしろ、 ひとまとまりのデータがレコード(単純に行と考えてもかまいません)と してまとまっていないと不便です。 しかし、現実には
住所:東京都世田谷区
性別:男
年齢:35
住所:東京都渋谷区
性別:女
年齢:29
住所:東京都目黒区
性別:男
年齢:42

     :
     :
     :
のようなデータとして集められてしまうことも よくあります。 このようなデータを
東京都世田谷区,男,35
東京都渋谷区,女,29
東京都目黒区,男,42
     :
のように連結し、awkや表計算ソフトで処理しやすいようにする のがこのプログラムの目的です。

プログラム

元データはすべて3個の要素(住所、性別、年齢) からなりたっているとします。 この場合、プログラムは案外単純です。 プログラムは以下のようになります。 エディタを開き以下をタイプして、適当な名前でセーブしてください。ここでは ren1.awk という名前でセーブしたことにして話を進めます。
BEGIN {
	FS = ":";
	JUUSHO = "";
	SEIBETU = "";
	NENREI = 0;
}
{
	if ( ( NR % 3 ) == 1 ) {
		JUUSHO = $2;
	}
		
	if ( ( NR % 3 ) == 2 ) {
		SEIBETSU = $2;
	}

	if ( ( NR % 3 ) == 0 ) {
		NENREI = $2;
		printf( "%s,%s,%d\n", JUUSHO, SEIBETSU, NENREI );
	}
}

入力データ

入力データは前述の、
住所:東京都世田谷区
性別:男
年齢:35
住所:東京都渋谷区
性別:女
年齢:29
住所:東京都目黒区
性別:男
年齢:42
というファイルが dat5.txt として存在するとします。

実行結果

ここでは、awk処理系としてgawkを利用し、 また、OSはWindowsを利用していると 仮定します。 DOS prompt 上で、
c:\awk> gawk -f ren1.awk dat5.txt
とタイプします。
東京都世田谷区,男,35
東京都渋谷区,女,29
東京都目黒区,男,42
と出力されるはずです。

このようなレコード連結の問題は いろいろなバリエーションが考えられます。
ここではもっとも単純な場合を想定しました。 より実践的なケースを こちら で解説しています。


メニューに戻る
Tkensaku

TKENSAKU top へ

Copyright © 2004 TKEN