在一个范围内生成多个随机数

ign*_*des 8 command-line

我想生成 100 到 200 之间的 10 个随机数(都包括在内)。我如何用兰特制作它?

mur*_*uru 7

如果你指的是randrand(而不是从OpenSSL的一个),它不支持的下界,只是一个上限。您可以做的是将下限移至零然后添加下限的技巧:

$ rand -N 10 -M 100 -e -d '\n' | awk '{$0 += 100}1'
170
180
192
168
169
170
117
180
167
142
Run Code Online (Sandbox Code Playgroud)
  • -N 是您需要的随机数的数量
  • -M将是数字rand输出的上限,因此(最大-最小= 100)
  • -e -d '\n'将分隔符设置为换行符。这是为了方便awk.

然后awk代码取每一行并添加 100。


hee*_*ayl 6

使用python

#!/usr/bin/env python2
import random
for i in range(10):
    print random.randint(100, 200)
Run Code Online (Sandbox Code Playgroud)

输出 :

187
123
194
190
124
121
191
103
126
192
Run Code Online (Sandbox Code Playgroud)

这里我使用了random模块python生成了 10 ( range(10)) 个介于 100 和 200 (包括) ( random.randint(100, 200))之间的随机整数。


ter*_*don 5

这是一种 Perl 方式:

$ perl -le 'print 100+int(rand(101)) for(1..10)'

129
197
127
167
116
134
143
134
122
117
Or, on the same line:

$ perl -e 'print 100+int(rand(101))." " for(1..10); print "\n"'
147 181 146 115 126 116 154 112 100 116 
Run Code Online (Sandbox Code Playgroud)

您还可以使用/dev/urandom(改编自此处):

$ for((i=0;i<=10;i++)); do 
    echo $(( 100+(`od -An -N2 -i /dev/urandom` )%(101))); 
done
101
156
102
190
152
130
178
165
186
173
143
Run Code Online (Sandbox Code Playgroud)


cuo*_*glm 5

来自shufGNU coreutils 的:

$ shuf -i 100-200 -n 10
159
112
192
140
166
121
135
120
198
139
Run Code Online (Sandbox Code Playgroud)


sno*_*oop 5

您还可以使用awk

$ awk -v min=100 -v max=200 -v freq=10 'BEGIN{srand(); for(i=0;i<freq;i++)print int(min+rand()*(max-min+1))}'
132
131
148
100
104
125
103
197
184
165
Run Code Online (Sandbox Code Playgroud)


Pab*_*abi 3

您可以使用$RANDOM

number=0   #initialize the number
FLOOR=100
RANGE=200
while [ "$number" -le $FLOOR ]
do
  number=$RANDOM
  let "number %= $RANGE"  # Scales $number down within $RANGE.
done
echo "Random number between $FLOOR and $RANGE $number"
echo
Run Code Online (Sandbox Code Playgroud)