パラグラフ型のデータを乱数を使ってランダムに並べ直す
では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ホームページに戻る