Esta ocasión les traigo dos formas de generar número aleatorios que me fueron de utilidad para un programa en c++ que realice.
La primera es haciendo uso de la variable $RANDOM
Su forma de trabajar es muy simple
Pero si lo que quieres es generar un número aleatorio de un rango en especial podemos modificarlo ligeramente de la siguiente manera:
$ echo $((RANDOM%32))
21
El cual lanza un número del intervalo [0,32) = [0,31] en caso de no querer iniciar con 0 podemos sumar 1 de la siguiente manera:
$ echo $((1+RANDOM%32))
30
El cual lanzará algún número del intervalo [1,31].
La forma es agradable y con un poco de imaginación se podría generar una lista de números pero si no te quieres quebrar la cabeza puedes hacer uso del comando shuf el cual si una lista de números aleatorios indicando un intervalo y cantidad.
Como ejemplo vamos a generar 23 números dentro del intervalo [0,44] el cual se haría de la siguiente manera:
$ shuf -n 23 -i 0-44
15
9
12
...
11
13
35
La primera es haciendo uso de la variable $RANDOM
Su forma de trabajar es muy simple
$ echo $RANDOM 18636Que en mi caso ese resultado obtuve.
Pero si lo que quieres es generar un número aleatorio de un rango en especial podemos modificarlo ligeramente de la siguiente manera:
$ echo $((RANDOM%32))
21
El cual lanza un número del intervalo [0,32) = [0,31] en caso de no querer iniciar con 0 podemos sumar 1 de la siguiente manera:
$ echo $((1+RANDOM%32))
30
El cual lanzará algún número del intervalo [1,31].
La forma es agradable y con un poco de imaginación se podría generar una lista de números pero si no te quieres quebrar la cabeza puedes hacer uso del comando shuf el cual si una lista de números aleatorios indicando un intervalo y cantidad.
Como ejemplo vamos a generar 23 números dentro del intervalo [0,44] el cual se haría de la siguiente manera:
$ shuf -n 23 -i 0-44
15
9
12
...
11
13
35
Ya que si la forma en que se te presento no fue de tu agrado podemos modificarlo para que aparezcan en una sola linea separados por un espacio:
$ echo $(shuf -n 23 -i 0-44)
41 28 33 34 38 6 26 27 42 4 31 43 40 25 21 2 8 5 19 10 37 3 13
Bueno como les comente al principio esto salio de la necesidad de obtener números aleatorios para probar un programa. De hecho loo que necesitaba era obtenerlos de la siguiente manera;
2 56 369 78 12
32 456 8789 7 2
Ya que el programa consistía en llenar una matriz para verificar que se tratase de un Rectángulo Latino (en otro post tal vez coloque el código por si a alguien le interesa y hablaré más al respecto) y debido a que tenia bastante flojera de teclearlos cada que probara el programa se me ocurrió que sería mejor generarlos con nuestra siempre amigable terminal :)
Así que agregando un ciclo for queda de la siguiente manera:
$ for i in `seq 1 20`
> do
> echo $(shuf -n 23 -i 0-44 )
> done
Explico brevemente el comando seq es utilizado para generar números consecutivos de un rango en este caso del 1 al 20 los cuales se le asignan a la variable i (que no esta siendo utilizada para este ejemplo) en cada iteración el valor que retorne el comando seq.
Para ver esto más claro pensemos en esto:
$ for i in `seq 1 2`
do
echo $i
done
1
2
El ciclo for separa por espacio todo lo obtenido en seq por lo cual sería equivalente a escribir:
$ for i in 1 2...
Cuando detecte el ciclo for que ya no hay más elementos se termina el ciclo.
Como ejemplo nuevamente generaremos una lista de números que estén dentro del intervalo [0,50] con 10 filas y 15 columnas de la siguiente manera:
$ for i in `seq 1 10`; do echo $(shuf -n15 -i 0-50 ); done 39 13 35 44 42 43 7 29 22 37 2 47 6 36 18 24 30 1 12 8 32 48 39 29 33 44 9 20 43 13 34 28 2 47 12 44 16 1 31 24 22 15 18 35 0 48 11 49 18 4 34 30 20 17 46 9 45 29 38 7 11 21 9 20 1 44 31 35 17 15 47 13 18 46 12 47 40 26 48 15 38 19 3 16 34 24 37 44 45 14 39 1 21 4 20 22 38 13 24 6 17 42 43 10 41 46 31 47 33 28 1 14 2 20 35 23 27 36 38 48 42 5 46 6 16 21 27 33 35 48 25 49 10 47 36 33 30 3 15 20 47 2 45 13 5 34 19 29 0 14
Espero les sirva.
Y luego hablaremos de algo llamado IFS y profundizaremos en el ciclo FOR.
No hay comentarios:
Publicar un comentario