シャッフルする必要がある配列があり、Awk を使用してこのアルゴリズムの速度を最適化したいと考えています。私はまだ Awk の使用に比較的慣れていないため、このアルゴリズムをシミュレートする最良の方法を見つけようとしていました。どうすればこれを適切に行うことができますか?
バッシュシャッフル:
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;
}
}'
}