Sé que puedo usar seq
para 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 shuf
para mezclar las líneas de un archivo. Por lo tanto, podría usar seq
para escribir números aleatorios en un archivo y luego usarlos shuf
para 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
...paste
que hice eso. Gracias por enseñarme Tener un voto a favor.join
ypaste
. Esas 2 herramientas son extremadamente poderosas.Suponiendo que tiene una matriz de enteros decimales:
Puede usar
printf
yshuf
para 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
10
y20
, no necesita ningún proceso adicional que no seashuf
mediante la-i
opción:Citando de
man shuf
:fuente
shuf --help
pero traté de usarloshuf -i 1 10
sin la intervención-dash.
, bueno, buen trabajo, tenga mi voto positivo.Ni siquiera necesitas un
for
bucle.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,
seq
yprintf
están hechos el uno para el otro. Por ejemplo, si quiero repetir una cadena 1000 veces?SALIDA
... 999
a string
líneas después ...O...
SALIDA
Quiero ejecutar un comando 39 veces?
SALIDA
... 38
run
líneas después ...fuente
Puede usar el
shuf
comando para aleatorizar la salida, por ej.fuente
POSIXY, para generar una lista aleatoria de los enteros decimales de
min
amax
: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