人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

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


●質問者: shinp
●カテゴリ:コンピュータ
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● JULY
●100ポイント ベストアンサー

こんなのはどうかな。

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 に対するオプションは違うかもしれません。


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

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ