El comando shuf genera permutaciones aleatorias de números, cadenas de textos o líneas de archivos

Los comandos de GNU coreutils son las herramientas básicas de nuestros sistemas GNU con kernel Linux similares a las de sistemas Unix, para gestionar desde la línea de comandos el sistema y operaciones con archivos de texto.
En este caso vamos a repasar para qué sirve y cómo usar el comando shuf que genera combinaciones aleatorias de diversos elementos ya sea en la línea de comandos o en algún script.
El comando shuf puede generar combinaciones aleatorias de diferentes elementos. La forma más sencilla de utilizarlo es simplemente escribiendo shuf en la terminal e introducir, bien sea números, letras o palabras. Para acabar de introducir texto pulsaremos la combinación de teclas Ctrl-d
$ shuf
victorhck
in
the
free
world
[Ctrl-d]
victorhck
world
the
free
in
También podemos hacer que shuf genere una secuencia aleatoria entre dos números dados mediante la opción -i por ejemplo entre el 1 y el 10
shuf -i 1-5
5
2
3
4
1
Si no queremos que añada un salto de línea después de cada elemento, podremos hacerlo con la opción -z que eliminará esos saltos de línea:
shuf -i 1-5 -z
52341
Quizás no queremos que muestre todos los elementos que se mezclan, si no solo los tres primeros de esa lista (o el número que queramos) se realiza con la opción -n del comando. Imaginemos que hemos vendido 100 tickets de una rifa y queremos que solo salgan tres números, que serán los que ganen los premios:
shuf -i 1-100 -n 3
28
45
26
Ahora que en un artículo anterior aprendiste a utilizar el comando head, el comando anterior sería similar a:
shuf -i 1-100 | head -n 3
Con este ejemplo, vemos que con | hacemos que la salida de un comando sea la entrada del siguiente comando, lo que dota a los comandos de una gran versatilidad el poder redirigir la salida o entrada de comandos.
Pero si lo que queremos es que la salida del comando shuf se escriba en un archivo utilizaremos la opción -o
$ shuf -i 1-100 -n 3 -o archivo
% cat archivo
42
37
22
Pero no solo de números viven los geeks, también ¿por qué no? en alguna ocasión nos interesará realizar combinaciones al azar de palabras, para ello utilizaremos la opción -e del comando, especificando las palabras separadas por espacios. Por ejemplo:
shuf -e victor hck in the free world
the
in
victor
free
hck
world
Vamos a aplicar la opción -z para que no añada saltos de línea al final de cada elemento, y quedaría así:
shuf -e victor hck in the free world -z
inthefreehckvictorworld⏎
¡Vaya! Parece una manera muy ocurrente de generar contraseñas aleatorias con diversos elementos ¿no?
Otra opción que tiene el comando shuf de GNU es la de no utilizar una vez cada elemento, si no poder repetir todos los elementos con la opción -r.
Vamos a crear un archivo enorme de texto, mezclando el comando con todas las opciones que hemos visto. ¡Ten cuidado! Para finalizar la escritura del archivo utiliza el atajo de teclado Ctrl-c para cancelar el trabajo.
$ shuf -e victor hck in the free world -z -r -o archivo
[Ctrl-c]
$ cat archivo
hckworldhckhckthehckworldworldworldinvictorfreetheworldvictorhckinvictorhckvictorhcktheininthehckvictorinfreehckinthehckhckhckworldthethehckhckinfreeintheinhckfreehckinfreeinvictorworldworldhckvictorfreeworldinvictortheinvictorworldvictorworldhckfreevictorhckhckworldworldhckthehckvictorworldhckinhckhckvictorfreeinhckin[...]
Y por supuesto también podemos combinar las líneas que forman un determinado archivo. Tenemos un archivo llamado números.txt con números del 1 al 5 y queremos de todos ellos de manera aleatoria que nos muestre uno al azar.
El archivo lo generaremos usando el comando seq de GNU, que ya aprendimos cómo utilizarlo.
$ seq 1 5 > numeros.txt
$ cat numeros.txt
1
2
3
4
5
$ shuf numeros.txt -n 1
6
Pero no hace falta guardar la salida del comando seq en un archivo, podemos pasarle la secuencia que genere al comando shuf, de esta manera:
$ seq 1 5 | shuf -n 1
3
$ seq 1 5 | shuf
4
5
1
2
3
Y hasta aquí las opciones del comando shuf, te animo a que leas la ayuda del comando shuf, para aprender más, aunque básicamente es esto que has podido leer en el blog.
¿Ya utilizabas shuf? ¿Lo implementas en algún script que usas? Comparte tu experiencia personal con el comando o simplemente comenta si te interesan estas series de tutoriales sobre comandos GNU.

Este ya no me ha gustado. Me ha sido hasta aburrida leer la entrada.
¡Artículo informativo y curioso. Saluods!