num=30
scale=0.5
awk -v N=$num -v scale=$scale 'BEGIN{srand();
for(i=0;i<N;i++){
a=rand();
b=(a*2-1)*scale
printf("%.2f\n", b);
}
}'
srand()
生成随机种子,可以包含指定seed的表达式,如srand(1234)
,如果没有srand()
,每次生成的随机数都是一样的,目前未搞清楚原因。
rand()
生成[0, 1)
的随浮点数。
如果需要生成[a,b)
范围内的随机数,只需要对rand()
生成的随机数做如下运算:
var1=rand()
var2 = a+var1*(b-a)
如生成[-1,1)
的随机数:
var1=rand()
var2 = -1+var1*(1-(-1))
# 或
var1=rand()
var2 = var1*2-1
如果将srand()
放在for
循环之内,在for
循环中生成的随机数都是一个值。
num=30
scale=0.5
awk -v N=$num -v scale=$scale 'BEGIN{
for(i=0;i<N;i++){
srand();
a=rand();
b=(a*2-1)*scale
printf("%.2f\n", b);
}
}'
参考:
https://www.runoob.com/w3cnote/awk-built-in-functions.html