bashにて、比較的精度の高いランダム値を得る方法はございますでしょうか?

テキストファイルのランダム行を抜き出すようなことをさせたいのですが、
$RANDOMで得られる値の範囲が16ビット程度のため、
上限を超えた行数のテキストファイルでは望みの処理を行うことが出来ません。
phpなどを使えば高精度のランダム値を取得できますが、
なるべくbash単体で可能な範囲でお願いいたします。

回答の条件
  • 1人3回まで
  • 13歳以上
  • 登録:2013/11/01 18:05:02
  • 終了:2013/11/05 02:11:23

ベストアンサー

id:JULY No.1

JULY回答回数966ベストアンサー獲得回数2472013/11/01 18:32:57

ポイント100pt

こんなのはどうかな。

dd if=/dev/urandom bs=4 count=1 2>/dev/null | od -tuL | head -1 | sed 's/^0* *//'

Linux での例です。/dev/urandom から 4 byte(32bit)を読んで、その値を od で 10 進数でダンプして、その先頭一行を取り出して、ダンプしたところだけを取り出しています。

Linux 以外の UNIX 系 OS だと、/dev/urandom はほとんど使えると思いますが、別の名前で用意されているかもしれません。あと、od に対するオプションは違うかもしれません。

id:shinp

/dev/urandom を使えば良いのですね!
というわけで、下のようなコマンドで目的達成出来ました!
(実行コスト的にもコマンドの長さ的にも殆ど変わらないと思いますが)
head -c 4 /dev/urandom |od -tu4 -A n|head -n 1|egrep -o "[0-9]+"

ありがとうございました!

2013/11/05 02:11:12

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません