パラグラフ型のデータを乱数を使ってランダムに並べ直す


では1行毎がレコードでない,パラグラフ型のデータは,どうなるのか?残念ながら MS-DOS 標準の sort ではうまく処理できません.私は,豊島正之さん1990年作の sortf を使わせていただいております.スクリプトは次の例のようになると思います.簡単のためレコード・セパレータは改行だけの行(空行)としてあります.

# random sort for paragraph type data
BEGIN	{
	split(ARGV[1], f, ".")
	outfile = f[1]".rs2"
	srand()
	print "#" rand() | "sortf -p > temp.xx"
}
	{
	if ($0 == "") {		# 空行をレコード・セパレータとする
		print "\n#" rand() | "sortf -p > temp.xx"
	}
	else	{ print $0 | "sortf -p > temp.xx" }
	printf("%d\r",NR)
}
END	{
	print ""
	close("sortf -p > temp.xx")
	while (getline < "temp.xx" > 0) {
		if ( $0 !~ "^#0.([0-9]+)$" ) {	# 付加した乱数以外を打ち出す
			print $0 > outfile
		}
		printf("%d\r",NR)
	}
	print ""
	close("temp.xx")
	print "" > "temp.xx"
}

JGAWKホームページに戻る