shell生成正态分布随机数(awk一行代码)

shell中产生随机数的方式有很多,常用a=$RANDOM或者awk内置的随机数rand()生成,但他们都是均匀分布随机数。

下面展示由均匀分布的随机数产生正态分布随机数的awk程序

 1 #!/bin/bash
 2 miu=0.0
 3 sigma=0.71
 4 num=2000
 5 awk 'BEGIN{
 6     srand();
 7     rms='"$sigma"'/2.24
 8     ssr=0;
 9     for (i=0; i<('"$num"'/2); i++) {
10         x1=rand(); 
11         x2=rand(); 
12         y1=rms*sqrt(-10*log(x1))*sin(2*3.1416*x2); 
13         y2=rms*sqrt(-10*log(x2))*cos(2*3.1416*x1); 
14         ssr=ssr+y1*y1+y2*y2;
15         printf("%f10.6\n%f10.6\n",y1+'"$miu"',y2+'"$miu"')
16     }; 
17     print "RMS of this data set is",sqrt(ssr/'"$num"')
18 }' > normal_random.txt

其中miu和sigma分别代表正态分布的数学期望和标准差,sum代表生成随机数的个数(偶数个)

上一篇:【全网原创】 正则表达式匹配,不包括某匹配项


下一篇:Log4j2远程命令执行复现