我有一个需要洗牌的数组,我想通过使用 Awk 来优化这个算法的速度。我对使用 Awk 还是比较陌生,我试图找出模拟这个算法的最佳方法。如何正确地做到这一点?
Bash 随机播放:
shuffle() {
local size limit rand i
size=${#password[*]}
limit=$(( 32768 / size * size))
for ((i=size-1; i > 0; i--)); do
while (((rand=$RANDOM) >= limit)); do :; done
rand=$((rand % (i+1)))
tmp=${password[i]}
password[i]=${password[rand]}
password[rand]=$tmp
done
}
awk 尝试:
shuffle() {
local size limit rand i
size=${#password[*]}
limit=$(( 32768 / size * size))
awk -v rand=$RANDOM 'BEGIN {
srand(rand);
for(i=size-1; i>0; i--) {
while(rand >= limit);
rand=rand % i + 1;
tmp=password[i];
password[i]=password[rand];
password[rand]=tmp;
}
}'
}