Sé que puedo usar seqpara generar una lista aleatoria de números: 1, 2, 3, 4 ...
Quiero poner esos números en un orden aleatorio como 3, 1, 4, 2 ...
Sé que puedo usar shufpara mezclar las líneas de un archivo. Por lo tanto, podría usar seqpara escribir números aleatorios en un archivo y luego usarlos shufpara mezclarlos, o escribir algún tipo de función aleatoria. Pero esto parece innecesariamente complejo. ¿Hay una manera más simple de aleatorizar los elementos en una matriz con un solo comando?
command-line
seq
bernie2436
fuente
fuente

echo $(seq 10 | shuf)se acerca pero no hace las comas.paste...pasteque hice eso. Gracias por enseñarme Tener un voto a favor.joinypaste. Esas 2 herramientas son extremadamente poderosas.Suponiendo que tiene una matriz de enteros decimales:
Puede usar
printfyshufpara aleatorizar los elementos de la matriz:(lo anterior supone que no ha modificado
$IFS).Si todo lo que necesita son números aleatorios entre dos enteros, digamos
10y20, no necesita ningún proceso adicional que no seashufmediante la-iopción:Citando de
man shuf:fuente
shuf --helppero traté de usarloshuf -i 1 10sin la intervención-dash., bueno, buen trabajo, tenga mi voto positivo.Ni siquiera necesitas un
forbucle.SALIDA
Para obtenerlos en una matriz de shell, debe hacer lo siguiente:
SALIDA
Y luego están en su matriz de shell.
Si los obtiene en la matriz de shell, ni siquiera necesita
printf:SALIDA
Por cierto,
seqyprintfestán hechos el uno para el otro. Por ejemplo, si quiero repetir una cadena 1000 veces?SALIDA
... 999
a stringlíneas después ...O...
SALIDA
Quiero ejecutar un comando 39 veces?
SALIDA
... 38
runlíneas después ...fuente
Puede usar el
shufcomando para aleatorizar la salida, por ej.fuente
POSIXY, para generar una lista aleatoria de los enteros decimales de
minamax:Tenga en cuenta que con muchas implementaciones awk, ejecutar ese comando dos veces en el mismo segundo producirá el mismo resultado (ya que
srand()genera el generador pseudoaleatorio en función del tiempo actual).fuente