Re: Crear 8 variables en un bucle WHILE (SOLUCIONADO)
Hola a todos,
Gracias por vuestras aportaciones. Al final, lo más fácil ha resultado hacer
lo siguiente:
#!/bin/bash
clear
i=1#contador aciertos
fecha=`date +%y%m%d` # fecha del fichero
cd ~/Desktop
while [ $i -le 9 ]
do
RND_MM[$i]=$RANDOM
if [ ${RND_MM[$i]} -ge 10000 ]; then
RND_dd[$i]=`echo ${RND_MM[$i]} | cut -c4,5`
if [ ${RND_dd[$i]} -lt 50 ] && [ ${RND_dd[$i]} -gt 0 ]; then
echo ${RND_dd[$i]}>>$aleatorias_var
let i=i+1
fi
fi
done
Me decanté por los vectores-como sugería Robinson-porque era más sencillo.
Resulta que soy un completo inútil con awk/gawk, la solución que apuntaba
Ollés. ¡Y mira que lo intentado unas cuantas veces! Gracias a los dos.
Ernesto
2006/4/19, Comventia Express
Hola lista,
Estoy creando un script en el que necesito definir 8 variables a partir de $RANDOM. Estas variables deberían guardarse. Tal y como está definido actualmente script, cada vez que ejecuta el bucle WHILE, el valor de ésta cambia. La estructura resumida de éste es:
#!/bin/bash i=1 #contador aciertos j=0 #contador total fecha=`date +%y%m%d` # fecha del fichero
while [ $i -le 8 ] do RND1=$RANDOM (*)<--Esta es la variable que debe definirse 8 veces--> let j=j+1 (Aquí va el proceso que se repite ocho veces. Lo omito para simplificar...) let i=i+1 done
La solución pasaría por: 1. Cambiar en (*) RND1 como RND$i=$RANDOM para obtener RND1, RND2, ..., RND8. Al ejecutar el script, veo en la shell que lo hace bien pero, en la misma línea, me termina dando error. La salida de la consola es: Desktop/Gerencia/scripts/random_prueba: line 16: RND1=535: command not found 2. Dejando el script como está, almanecenar $RND1 en un fichero mediante RND1=$RANDOM>>random_variables.txt. Esto lo hace sin error y genera el fichero con 8 líneas, una por cada valor obtenido para $RND1. Ahora bien, ¿cómo puedo hacer que RND1, cada una de las ocho veces que se genera, se compare con los valores almacenados en el fichero txt y evitar repeticiones? Lo he intentado con sed, cat, head... pero ninguno me permite comparar la variable con cada uno de los valores del txt, sólo me permiten visualizar un grupo determinado de líneas (las primeras, las últimas...).
Gracias a todos. Un abrazo, E Garrido
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 El 2006-04-21 a las 10:24 +0200, Comventia Express escribió:
RND_MM[$i]=$RANDOM if [ ${RND_MM[$i]} -ge 10000 ]; then
Si lo que necesitas es un valor aleatorio entre 0 y 10000, lo que tienes que hacer es dividir el resultado por 32767 y multiplicar por 10000. De lo contrario, tienes un valor aleatorio de baja calidad (se puede medir estadísticamente). RANDOM Each time this parameter is referenced, a random integer between 0 and 32767 is generated. The sequence of random numbers may be initialized by assigning a value to RANDOM. If RANDOM is unset, it loses its special properties, even if it is subsequently reset. - -- Saludos Carlos Robinson -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.0 (GNU/Linux) Comment: Made with pgp4pine 1.76 iD8DBQFESM7ctTMYHG2NR9URAgWNAJ9AgHbqCVUnXBdgkt7USVZ5MoJzDgCggXHn gl9dNCY/rZ8JW+vvjamLFvk= =dqEE -----END PGP SIGNATURE-----
participants (2)
-
Carlos E. R.
-
Comventia Express