Aleatoriedad en ficheros y números con shuf

Una de las formas que tenemos para hacer que los ordenadores tengan un comportamiento más parecido a los humanos es el uso de la aleatoriedad. También la podemos usar para que sea el azar y no nosotros quien tome una decisión. O como elemento lúdico. Sea cual sea nuestra motivación, cuando necesitamos trabajar con aleatoriedad en GNU/Linux tenemos el comando shuf que nos permite muchas opciones.

Ordenar aleatoriamente las líneas de un fichero

Para ordenar aleatoriamente las líneas de un fichero simplemente tenemos que pasarle como parámetro el fichero a ordenar aleatoriamente o desordenar:

shuf fichero

Y, para guardarlo en un nuevo fichero, redirigir la salida a otro fichero:

shuf fichero > fichero_ordenado_aleatoriamente

O con el modificador -o:

shuf fichero -o fichero_ordenado_aleatoriamente

Si sólo queremos que muestre un número determinado de líneas del fichero ordenado aleatoriamente, podemos usar el modificador -n seguido del número de líneas a mostrar:

shuf -n 3 fichero

Por defecto, shuf sólo ordenará aleatoriamente las líneas del fichero sin repetir ninguna. Si queremos que pueda repetir las líneas del fichero, usaremos -r, que repetirá infinitamente la ordenación aleatoria de las líneas del fichero, por lo que debemos indicarle el número de líneas que queremos que muestre:

shuf -r -n 3 fichero

Si queremos que devuelva exactamente el mismo número de líneas, nos podemos ayudar de wc -l y limitar la salida a únicamente el primer valor que es el número de líneas:

stop=$(wc -l fichero | cut -d " " -f 1)

Y pasarle este valor al modificador -n:

stop=$(wc -l fichero | cut -d " " -f 1); shuf fichero -r -n$stop

Ordenar un rango numérico

Con -i podemos indicar un rango numérico para generar su orden aleatorio. Por ejemplo, si queremos que ordene aleatoriamente los números del 1 al 10, escribiremos:

shuf -i 1-10

Y si sólo queremos una muestra de ese rango, podemos limitarlo con -n. Supongamos que queremos un único número aleatorio entre el 1 y el 10:

shuf -i 1-10 -n 1

Con rangos numéricos también podemos aplicar el modificador -r para que se repitan los números:

shuf -r -i 1-10 -n 10

Y también almacenar la salida con -o:

shuf -r -i 1-10 -n 10 -o aleatorios_del_1_al_10.txt

 

Deja una respuesta

Tu dirección de correo electrónico no será publicada.