En esta entrada hablaremos de cómo utilizar el comando "shuf" de GNU Core Utils. Shuf (de la palabra inglesa "shuffle") es una utilidad estándar de GNU que nos simplificará la tarea de generar permutaciones aleatorias en listas, números o cadenas de texto desde cualquier shell de GNU/Linux sin necesidad de utilizar otras herramientas externas (por ejemplo, páginas web dedicadas a sacar números o listas aleatorias).
Esto nos servirá por ejemplo para realizar sorteos entre varias personas o para generar un número aleatorio sin ningún tipo de limitaciones. Este programa ya viene preinstalado en el sistema base de la mayoría de distribuciones GNU/Linux, por lo que en la mayoría de casos no requerirá instalar ningún paquete adicional.
Por defecto, lo que hace shuf es leer una lista en forma de texto que reciba por entrada estándar y devolver por salida estándar a la consola la lista barajada. Por ejemplo, si abrimos la terminal y escribimos: "ls / | shuf", nos imprimirá por pantalla los archivos que tengamos en el directorio raíz del sistema, desordenado aleatoriamente.
Si ahora queremos realizar un sorteo entre varias personas, antes necesitaremos crear un archivo de texto listando el nombre, correo o cualquier otro identificador único de cada sujeto inscrito. Si no tenemos ningún archivo de texto que liste línea a línea cada una de las personas sobre las que realizar el sorteo, lo podemos crear rápidamente desde terminal usando cat o cualquier editor de textos ( como ed, sed, emacs, etc).
Nosotros vamos a generar una lista con el nombre, primer apellido y correo de cada uno de los participantes de un sorteo con cat redirigiendo la salida a un archivo llamado lista. Para terminar de escribir la lista, pulsamos Ctrl+D en una nueva línea.
Ahora, si queremos simplemente barajar la lista, escribimos:
1 |
$ shuf lista |
Siendo "lista" el nombre del archivo de lista que tengamos creado.
De esta forma nos generará una lista del mismo tamaño del archivo que le hayamos pasado por parámetro o por entrada estándar, pero con las líneas desordenadas aleatoriamente. Si la lista aleatoria generada es muy extensa o si la queremos conservar en un archivo de texto, podemos redirigir la salida de shuf a un fichero utilizando el operador de descriptor de archivo ">" como hemos hecho antes con cat:
1 |
$ shuf lista > "lista aleatoria.txt" |
Si en su lugar queremos sacar un número limitado de resultados, al comando shuf le pasaremos la opción "-n X" sin las comillas, siendo X un número entero correspondiente al número de resultados que queramos sacar.
Así, si escribimos el siguiente comando, limitaremos los resultados del sorteo a una sola persona:
1 |
$ shuf -n 1 lista |
Para sorteos rápidos y sin necesidad de crear un archivo de lista, también podemos utilizar la opción "-e" de shuf, pasándole a continuación los nombres de los candidatos a sortear separados por espacios. Podemos encerrar entre comillas cada uno de los candidatos que pasemos por parámetro en caso de que alguno contenga espacios.
Por ejemplo, para jugar a "piedra, papel o tijeras" con la terminal sacando un sólo candidato aleatorio (-n 1) de entre tres posibles, escribiendo en el shell:
1 2 |
$ shuf -n 1 -e Piedra Papel Tijeras Papel |
O bien podemos realizar un sorteo numérico en un intervalo específico con la opción "-i X-Y", siendo X el número entero mínimo del intervalo e Y el valor máximo. Si queremos sacar tres números aleatorios (-n 3) del 1 al 100, ambos inclusive, escribimos:
1 2 3 4 |
$ shuf -n 3 -i 1-100 69 100 57 |
Como puedes ver, este comando tiene muchas aplicaciones posibles, sobre todo si le echas imaginación 😉
Hasta aquí algunos usos básicos que se le puede dar a la utilidad shuf en cualquier distribución GNU/Linux. Si tienes ganas de experimentar otras opciones con este comando, puedes consultar su página del manual o su documentación desde la terminal, introduciendo uno de los dos comandos de a continuación:
1 2 |
$ man 1 shuf $ info shuf |