On Tuesday 18 July 2006 13:38, Tiago Barcellos Peczenyj wrote:
> awk 'BEGIN{srand(); print (2*rand()-1)/1000}'
Olá,
tive de alterar seu exemplo p/ checar a validade do intervalo:
awk 'BEGIN{srand(); printf "%0.4f", (2*rand()-1)/1000}'
$ ./teste awk
0.0008
0.0008
0.0008
0.0008
0.0008
0.0008
0.0008
0.0008
0.0008
0.0008
Note que a qualidade randômica dos números gerados pelo awk mostrou-se péssima
aqui (são todos iguais em um intervalo muito curto de tempo), isso pode ser
contornado colocando um incômodo `sleep 2` no loop (por exemplo).
O script é o seguinte:
$ cat teste
#!/bin/sh
MAX=${2-10}
test_dc() {
echo -e "4\nk\n$RANDOM\n32767\n/\n0.002\n*\n0.001\n-\np" | dc
}
test_bc() {
echo "scale=4; $RANDOM / 32767 * 0.002 - 0.001" | bc
}
test_awk() {
awk 'BEGIN{srand(); printf "%0.4f", (2*rand()-1)/1000}'
}
echo_err() {
echo "ERR (fora do intervalo)"
}
check_range() {
test `echo $1 \<= .001 | bc` = 0 && echo_err
test `echo $1 \>= -.001 | bc` = 0 && echo_err
}
rand_loop() {
for((x=0; x<$MAX; x++)); do
tmp=`eval test$1`
echo $tmp
check_range $tmp
done
}
case $1 in
dc)
rand_loop _dc
;;
bc)
rand_loop _bc
;;
awk)
rand_loop _awk
;;
*)
echo "Usage: $0 dc|bc|awk MAX"
exit 1
;;
esac
---------------------------------------------------------------------
Esta lista não admite a abordagem de outras liguagens de programação, como
perl, C etc. Quem insistir em não seguir esta regra será moderado sem prévio
aviso.
---------------------------------------------------------------------
Sair da lista: [EMAIL PROTECTED]
---------------------------------------------------------------------
Esta lista é moderada de acordo com o previsto em
http://www.listas-discussao.cjb.net
---------------------------------------------------------------------
Servidor Newsgroup da lista: news.gmane.org
Grupo: gmane.org.user-groups.programming.shell.brazil
Links do Yahoo! Grupos
<*> Para visitar o site do seu grupo na web, acesse:
http://br.groups.yahoo.com/group/shell-script/
<*> Para sair deste grupo, envie um e-mail para:
[EMAIL PROTECTED]
<*> O uso que você faz do Yahoo! Grupos está sujeito aos:
http://br.yahoo.com/info/utos.html