Eu sei que posso usar seq
para gerar uma lista aleatória de números: 1, 2, 3, 4 ...
Quero colocar esses números em uma ordem aleatória como 3, 1, 4, 2 ...
Eu sei que posso usar shuf
para embaralhar as linhas de um arquivo. Então, eu poderia seq
escrever números aleatórios em um arquivo e depois shuf
embaralhá-los - ou escrever algum tipo de função aleatória. Mas isso parece desnecessariamente complexo. Existe uma maneira mais simples de randomizar os itens em uma matriz com um único comando?
command-line
seq
bernie2436
fonte
fonte
echo $(seq 10 | shuf)
chega perto, mas não faz vírgulas.paste
...paste
que fiz isso. Obrigado por me ensinar. Tenha um voto positivo.join
epaste
. Essas 2 ferramentas são extremamente poderosas.Supondo que você tenha uma matriz de números inteiros decimais:
Você pode usar
printf
eshuf
para randomizar os elementos da matriz:(o acima pressupõe que você não modificou
$IFS
).Se tudo o que você precisa são números aleatórios entre dois números inteiros, digamos
10
e20
, você não precisa de nenhum processo extra além deshuf
usar a-i
opção:Citação de
man shuf
:fonte
shuf --help
mas tentei usarshuf -i 1 10
sem a intervenção,-dash.
oh bem, bom trabalho - tenho meu voto positivo.Você nem precisa de um
for
loop.RESULTADO
Para obtê-los em uma matriz shell, você deve:
RESULTADO
E então eles estão em sua matriz de shell.
Se você obtê-los na matriz shell, você nem precisa
printf
:RESULTADO
A propósito,
seq
eprintf
são feitos um para o outro. Por exemplo, se eu quiser repetir uma string 1000 vezes?RESULTADO
... 999
a string
linhas depois ...Ou...
RESULTADO
Eu quero executar um comando 39 vezes?
RESULTADO
... 38
run
linhas depois ...fonte
Você pode usar o
shuf
comando para randomizar a saída, por exemplofonte
POSIXly, para gerar uma lista aleatória dos números inteiros decimais de
min
paramax
:Observe que, com muitas implementações do awk, executar esse comando duas vezes no mesmo segundo produzirá o mesmo resultado (como
srand()
semear o gerador pseudo-aleatório com base no horário atual).fonte