En tres artículos he estado argumentando en contra del uso de $RANDOM para generar números aleatorios:
El mito de $((RANDOM%$limitesuperior))
Más sobre la "aleatoriedad" de $RANDOM
Dados cargados en $RANDOM
Pero es poco honesto criticar algo sin aportar una solución, así que aquí voy a explicar el uso de shuf y en otro artículo explicaré varias formas de usar shuf para generar números aleatorios.
El uso de shuf
shuf se puede usar para ordenar aleatoriamente un fichero de texto:
shuf fichero.txt
Como vemos al usar cat, las palabras de fichero.txt tenían un orden que, al usar shuf, han cambiado de orden.
También shuf permite seleccionar X elementos de una lista. Ya lo hemos usado otras veces, como al elegir aleatoriamente una tipografía o un color con ImageMagick. Pero veamos con el ejemplo anterior:
shuf -n2 fichero
Con el parámetro -n$numerodelineas muestra el número de líneas incado como valor a -n.
Otra forma de usar shuf es recibiendo una lista desde la salida de otro fichero.
Veamos un ejemplo creando una serie de ficheros en un directorio y luego seleccionando uno al azar recogiendo con shuf la salida de ls.
Otro parámetro muy interesante es -o para especificar un fichero donde guardar la salida de shuf. Evolucionemos la instrucción anterior:
ls | shuf -o ordenaleatorio.txt