Atualmente eu faço algo assim para definir uma variável para um item aleatório em uma matriz:
array=("foo" "bar" "baz")
var=${array[$RANDOM % ${#array[@]} ]}
Como eu faria se quisesse definir $var
um desses valores, mas especificar a chance de que a variável fosse definida para o valor de cada item respectivamente? Digamos que eu queira 73,3% de chance de foo
, 26,6% de chance de bar
, e 0,1% de chance de baz
.
Uma maneira: configurar um array paralelo com as chances percentuais correspondentes; abaixo, eu os dimensionei para 1.000. Em seguida, escolha um número aleatório entre 1 e 1.000 e percorra a matriz até que você fique sem chances:
O shell não pode fazer matemática de ponto flutuante, mas se apenas movermos o ponto decimal, podemos usar
$RANDOM
e matemática inteira:Isso tem as vantagens de não precisar explodir o array em até 1000 entradas ou precisar de
for
loops.