Я знаю, что могу использовать seq
для генерации случайного списка чисел: 1, 2, 3, 4 ...
Я хочу получить эти числа в случайном порядке, как 3, 1, 4, 2 ...
Я знаю, что могу использовать, shuf
чтобы перетасовать строки файла. Так что я мог бы использовать seq
для записи случайных чисел в файл, а затем использовать, shuf
чтобы перемешать их - или написать какую-то функцию перемешивания. Но это кажется излишне сложным. Есть ли более простой способ рандомизировать элементы в массиве с помощью одной команды?
command-line
seq
bernie2436
источник
источник
echo $(seq 10 | shuf)
подходит близко, но не делает запятые.paste
...paste
сделал это. Спасибо, что научил меня. Имейте upvote.join
иpaste
. Эти 2 инструмента очень мощные.Предполагая, что у вас есть массив десятичных целых чисел:
Вы можете использовать
printf
иshuf
для рандомизации элементов массива:(Выше предполагается, что вы не изменились
$IFS
).Если все, что вам нужно, это случайные числа между двумя целыми числами, скажем,
10
и20
, вам не нужны никакие дополнительные процессы, кроме какshuf
с помощью-i
опции:Цитирование из
man shuf
:источник
shuf --help
но я пытался использоватьshuf -i 1 10
без вмешательства,-dash.
ну, хорошо, хорошая работа - мой голос.Вам даже не нужна
for
петля.ВЫХОД
Чтобы получить их в массиве оболочки, вы должны:
ВЫХОД
И тогда они в вашем массиве оболочки.
Если вы получаете их в массиве shell, вам даже не нужно
printf
:ВЫХОД
Кстати,
seq
иprintf
вроде как созданы друг для друга. Например, если я хочу повторить строку 1000 раз?ВЫХОД
... 999
a string
строк спустя ...Или...
ВЫХОД
Я хочу выполнить команду 39 раз?
ВЫХОД
... 38
run
строк спустя ...источник
Вы можете использовать
shuf
команду для рандомизации вывода, напримеристочник
POSIXly, для генерации перемешанного списка десятичных целых чисел из
min
доmax
:Помните, что во многих реализациях awk выполнение этой команды дважды в течение одной и той же секунды приведет к тому же результату (что и приводит
srand()
к генерации псевдослучайного генератора на основе текущего времени).источник