awk在2个输入之间获得随机整数值的良好分布

时间:2020-04-16 17:27:38

标签: awk

如何使用awk在2个输入之间很好地分配随机整数值?

我正在尝试以下

$ awk -v min=200 -v max=500 ' BEGIN { srand();for(i=0;i<10;i++) print int(min+rand()*100*(max/min))  } '
407
406
360
334
264
365
303
417
249
225
$

awk中是否有更好的方法

1 个答案:

答案 0 :(得分:3)

很抱歉通知您您的代码甚至不正确。尝试使用min = max = 10。

类似的事情会起作用。您也可以验证均匀性。

$ awk -v min=200 -v max=210 ' BEGIN{srand();
                                    for(i=0;i<10000;i++) a[int(min+rand()*(max-min))]++; 
                                    for(k in a) print k,a[k]}' | sort
200 1045
201 966
202 1014
203 1016
204 985
205 1010
206 988
207 1027
208 986
209 963

还请注意,最小值是包含在内的,而最大值不是。