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

标签 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]
    }
}'

附注 不是重复的,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() 在同一位置给出了两个完全相同的数字....我怎样才能使第二个 rand 给出不同的数字??????

最终更新

Sooooo,对于任何阅读并遇到同样问题的人来说,解决方案是在您称为 srand 的两个部分之间使用 sleep 1....

最佳答案

srand() 调用置于循环外部。对于相同的种子值,rand()将产生相同的数字序列。不带任何参数的 srand() 会使用当前时间戳作为种子,并且循环可能碰巧使用相同的种子值。因此,您会看到相同的数字。

关于unix - nawk 中的 for 循环中的 rand() 始终返回相同的值 -ksh,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36766328/

相关文章:

unix - 自定义 init.d 脚本给出守护进程 : not found

linux - 在 .CSV 之前从 Linux 中的文件名中删除日期并附加

python - 打印 Pandas 数据框中每一列的唯一值

java - 使用for循环在静态add方法中获取总和并将其返回给main方法

python - 可扩展的偏向数生成器 - Python

c - 打乱用户输入的字符串

linux - 如何用shell函数制作 "dictionary"?

java - 在 UNIX 系统上获取从 Java 创建的文件日期的最佳方法?

javascript - Settimeout 在 For 循环中不起作用,表现得很奇怪?

php - 在 PHP 中生成高达 100MB 的随机字符串以进行测试的有效方法?