awk生成随机数

  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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。