私のスクリプトをよりランダムにするために、ShufをタイムシードのあるRand(C ++)にどのように変更できますか?

私のスクリプトをよりランダムにするために、ShufをタイムシードのあるRand(C ++)にどのように変更できますか?

任意の文字セットから200文字を抽出するスクリプトがあります。

tail -n+2 file.fasta | tr -d '\n' > newfile n=$(stat -c "%s" newfile) r=$(shuf -i1-"$((n-200+1))" -n1) newfile tail -c+"$r" | head -c200

時間シード(srand(time(0))を使用してrand()のshufを変更できるかどうかを知っている人はいますか?成功せずにスクリプトを変更してみました。

どんな提案がありますか?事前にありがとう

ベストアンサー1

RANDOM という Bash 変数があります。読み取るたびに、その値は0から32767(含む)の間の他の任意の整数です。範囲はそれほど広くありませんが、十分です。

RANDOMに数値を割り当てることで、ランダムシーケンスをシードできます。私は通常この目的のためにシェル自体のpidを使います。

Paul--) RANDOM=$$
Paul--) for j in {1..6}; do printf ' %d' $RANDOM; done
 16928 18765 4814 6954 3017 31155
Paul--) 

これがなぜ受け入れられないのかよくわかりませんshuf。これはスケーリング(シェル算術を使用して実行する必要があります)を提供し、範囲が大きく(最大2 ^ 63 - 1)、数ミリ秒以内に実行されます。 (スクランブルされたファイルは行を選択する前にファイル全体を読み取るため、遅くなる可能性がありますが、-iを使用するとよりスマートに機能します。)

追加の要件が何であるかを説明すると、より良いソリューションを提供できます。

おすすめ記事