nawk中for循环中的rand()返回的值始终相同-ksh

时间:2016-04-21 10:06:58

标签: unix for-loop random awk ksh

我现在用这个rand()来解决自己太多的烦恼。

我想在数组中添加1000随机数,这是我到目前为止所做的,它没有错误,但是rand一直在数组传递中分配相同的数字。随机数的变化我希望它从1到999 ......任何想法都出错了?

顺便说一句,我在ksh中运行...

nawk  ' BEGIN{ 
    for (i=0; i<=999; i++) {
        srand()
        NUMBERS[i]= int(rand()*(999))
        print NUMBERS[i]
    }
}'

P.S。 对于ksh而言,这不是一个公开的,没有其他相同的问题。

已更新

nawk  ' BEGIN{ 
    srand(1)
    for (i=0; i<=999; i++) {
        NUMBERS[i]= int(rand()*(999))
        XNUMBERS[i]= int(rand()*(999))
        print NUMBERS[i]
        print XNUMBERS[i]
    }
}'

UPDATE_2

所以我的工作代码就是这个

NUMBERS=`nawk ' BEGIN{ 
    srand()
    for (i=0; i<=999; i++) {
        printf("%s\n", 100 + int(rand() * (899)));
    }   
}'`
NUMBERS
#echo $NUMBERS
XNUMBERS=`nawk ' BEGIN{ 
    srand()
    for (i=0; i<=999; i++) {
        XNUMBERS[i]= 100 + int(rand() * (899));
    }
    for (i=0; i<=999; i++) {
        ver=XNUMBERS[i] "";
                rev = "";
        for (q=length(ver); q!=0; q--) {
                rev = rev substr(ver, q, 1);
               }
        printf("%s\n", XNUMBERS[i] "|" rev );
    }
}'`

我正在创建两个不同的列表,但是rand()在同一位置给出了两个相同的确切数字....我怎么能让第二个兰特给出不同的数字?????

最终更新

Sooooo,对于任何阅读并遇到同样问题的人来说,解决办法就是在你称之为srand的两个部分之间睡一觉......

1 个答案:

答案 0 :(得分:3)

srand()调用放在循环之外。对于相同的种子rand(),将生成相同的数字序列。没有任何参数的srand()使用当前时间戳作为种子,并且循环可能恰好使用相同的种子值。因此,您会看到相同的数字。