Realizar sorteos desde la terminal

gshuf-manEn 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.

gshuf-lsroot

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.

gshuf-catlist

Ahora, si queremos simplemente barajar la lista, escribimos:

Siendo “lista” el nombre del archivo de lista que tengamos creado.

gshuf-shuffled

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:

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:

gshuf-shufn1

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:

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:

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:

Acerca de Felfa

Felfa
... pero también puedes llamarme Álex.Estudiante de ingeniería informática en la UA y de DAM. Devoto del software libre, de la retroinformática y del retrogaming.

Visita también

Tutorial para instalar la versión de mantenimiento del kernel Linux 4.13.2

Hoy mismo se publico la segunda versión de mantenimiento del kernel 4.13, siendo esta la …

Deja una respuesta

6 Comentarios En "Realizar sorteos desde la terminal"

Notificarme las
avatar
luis javier
Invitado

como haga para generar una combinacion numerica de 5 numeros ejemplo del 01 al 75 y 01 al 69

Felfa
Invitado

No sé si te he entendido bien. ¿Te refieres a formar una secuencia numérica de 5 números con intervalos del 1 al 75 y del 1 al 69 incluyendo el cero a la izquierda?

Si es así, puedes combinar shuf con el comando seq de la siguiente forma:

Lo que hará eso es arrojar por terminal una secuencia de 5 números del 01 al 75 incluyendo los ceros a la izquierda en caso de que salga un número de una cifra significativa. Si quieres hacer lo mismo con un intervalo distinto, simplemente cambia el número inicial y final del comando seq.

Si quieres que la salida por consola no tenga saltos de línea por si querías que el resultado final sea un solo número, añádele el flag “-z” a shuf:

trackback

[…] 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  […]

Mikel Garin
Invitado

Muy bueno! me ha encantado este comando que no conocía! El bombo a muerto! Viva el shuf!!!

Felfa
Invitado

Para sacar números aleatorios también está la posibilidad de jugar con la variable de entorno $RANDOM, que devuelve un número entero del 0 al 32767.

Por ejemplo, sacando el módulo 99 de la variable $RANDOM y sumándole 1 al valor final, podemos sacar un número del 1 al 99: echo $(((RANDOM % 99) + 1))

trackback

Información Bitacoras.com

Valora en Bitacoras.com: 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 aleator…

wpDiscuz