使用shell脚本,我希望生成五个文件,并希望在每个文件中放置50000~150000的不同随机数范围。我尝试了类似的事情,
for i in 01 02 03 04 05; do
A=$((50000+100000))
B=$(($B%$A))
cat > ${i}.dat << EOF
AArandom=$A
EOF
done
但这不起作用....如何为每个文件制作随机数字并打印出来?
答案 0 :(得分:5)
每次读取变量$RANDOM
的值时,
它会为您提供0到2^15 - 1
之间的随机数,
这是0和32767.所以这不会给你足够的范围。
您可以使用两个$RANDOM
作为base-15的两位数,
然后采用适当的模数并应用适当的范围归一化。
这是包含在函数中的逻辑:
randrange() {
min=$1
max=$2
((range = max - min))
((maxrand = 2**30))
((limit = maxrand - maxrand % range))
while true; do
((r = RANDOM * 2**15 + RANDOM))
((r < limit)) && break
done
((num = min + r % range))
echo $num
}
然后你可以像这样循环生成文件:
for i in 01 02 03 04 05; do
echo "AArandom=$(randrange 50000 150000)" > $i.dat
done
请注意,randrange
的实施需要注意:
如果值有偏差,有一个循环重新滚动,
但理论上这可能会阻止函数终止。
在实践中,这是极不可能的,但值得一提。
答案 1 :(得分:1)
shuf
可能就是你想要的:
$ shuf -i 50000-150000 -n 1
148495