nawk 中 for 循环中的 rand() returns 总是相同的值 -ksh
rand() in for loop in nawk returns always same value -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() 在同一位置给出了两个完全相同的数字....我怎样才能让第二个 rand 给出不同的数字?????
最终更新
Sooooo,对于任何阅读并遇到同样问题的人,解决方案是在您称为 srand 的两个部分之间使用 sleep 1....
将 srand()
调用 放在 循环之外。对于相同的 seed 值 rand()
将产生 same 数字序列。 srand()
不带任何参数使用当前时间戳作为种子并且循环可能恰好使用相同的种子值。因此,您会看到相同的数字。
我现在用这个 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() 在同一位置给出了两个完全相同的数字....我怎样才能让第二个 rand 给出不同的数字?????
最终更新
Sooooo,对于任何阅读并遇到同样问题的人,解决方案是在您称为 srand 的两个部分之间使用 sleep 1....
将 srand()
调用 放在 循环之外。对于相同的 seed 值 rand()
将产生 same 数字序列。 srand()
不带任何参数使用当前时间戳作为种子并且循环可能恰好使用相同的种子值。因此,您会看到相同的数字。