Если вы не предоставите начальное значение для srand
, оно будет использовать либо текущую дату и время, либо фиксированное начальное начальное число (это может варьироваться в зависимости от реализации). Это означает, что для первых, если ваши процессы работают достаточно быстро, все они будут использовать один и тот же начальный поток и генерировать одну и ту же последовательность.
И, для последнего, не имеет значения, как долго вы будете ждать, вы будете получать одинаковую последовательность при каждом запуске.
Вы можете обойти любой из них, используя другое семя, предоставленное оболочкой.
awk -v seed=$RANDOM 'BEGIN{srand(seed);}{print rand()" "$0}' ...
Число, предоставляемое $RANDOM
, изменяется в каждой итерации, поэтому каждый запуск программы awk
получает различное начальное число.
Вы можете увидеть это в действии в следующей расшифровке:
pax> for i in $(seq 1 5) ; do
...> awk 'BEGIN{srand();print rand()}'
...> done
0.0435039
0.0435039
0.0435039
0.0435039
0.0435039
pax> for i in $(seq 1 5) ; do
...> awk -v seed=$RANDOM 'BEGIN{srand(seed);print rand()}'
...> done
0.283898
0.0895895
0.841535
0.249817
0.398753