If you don't provide a seed to srand
, it will either use the current date and time or a fixed starting seed (this may vary with the implementation). That means, for the former, if your processes run fast enough, they'll all use the same seed and generate the same sequence.
And, for the latter, it won't matter how long you wait, you'll get the same sequence each time you run.
You can get around either of these by using a different seed, provided by the shell.
awk -v seed=$RANDOM 'BEGIN{srand(seed);}{print rand()" "$0}' ...
The number provided by $RANDOM
changes in each iteration so each run of the awk
program gets a different seed.
You can see this in action in the following transcript:
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
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…