我有一个从一组随机字符中提取 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 分配一个数字来播种随机序列。我通常使用 shell 自己的 pid 来实现此目的。
Paul--) RANDOM=$$
Paul--) for j in {1..6}; do printf ' %d' $RANDOM; done
16928 18765 4814 6954 3017 31155
Paul--)
不清楚为什么这shuf
是不可接受的。它提供了缩放(否则您需要使用 shell 算术来完成),它具有很大的范围(高达 2^63 - 1),并且在几毫秒内执行。 (打乱文件的速度可能会很慢,因为它会在选择行之前读取整个文件,但是使用 -i 可以更智能地工作。)
如果您解释一下您还有什么进一步的要求,我们也许能够提供更好的解决方案。