Ваш комментарий под ответом указывает, что вы хотите хранить перетасованные списки в самом скрипте, а не полагаться на внешнюю утилиту. Хотя вы можете просто вызывать утилиты в вашем скрипте, вы также можете «разместить список элементов» внутри скрипта, используя массивы в bash. (хотя неясно, имеете ли вы в виду окончательный список или первоначальные списки, использование формы множественного числа предполагает первоначальные списки).
Чтобы сохранить список из файла в массивах в вашем сценарии в произвольном порядке, вы можете просто использовать подстановку команд, например,
brands=( $(shuf brands.txt) ) ## fill brands array with shuffled brands.txt
colors=( $(shuf colors.txt ) ) ## fill colors array with shuffled colors.txt
(если вы хотите оригинальные списки без перетасовки, просто замените shuf
на <
)
( примечание: , если любая строка может включать пробелы, вы должны установить переменную Внутренний разделитель полей (IFS
), чтобы разрывать только символы новой строки перед заполнением ваших массивов, или в качестве альтернативы используйте mapfile -t
для их заполнения)
Затем, чтобы выбрать элемент из brands
и из colors
, чтобы соединить их, просто используйте цикл for
в стиле C, чтобы соединить одинаковые индексы, например,
for ((i = 0; i < limit; i++)); do
printf "%s %s\n" "${brands[i]}" "${colors[i]}"
done
(где limit
выше - это меньшее количество элементов между brands
и colors
)
Собрав весь скрипт и установив IFS
, как описано выше, вы можете сделать:
#!/bin/bash
oifs="$IFS" ## save original IFS (Internal Field Separator)
IFS=$'\n' ## set IFS to only break on newlines (if spaces in lines)
brands=( $(shuf brands.txt) ) ## fill brands array with shuffled brands.txt
colors=( $(shuf colors.txt ) ) ## fill colors array with shuffled colors.txt
IFS="$oifs" ## restore original IFS
limit=${#brands[@]} ## find array with least no. of elements
[ "${#colors[@]}" -lt "$limit" ] && limit=${#colors[@]}
for ((i = 0; i < limit; i++)); do
printf "%s %s\n" "${brands[i]}" "${colors[i]}"
done
Который при запуске создаст ваши случайные отображения, например
Пример использования / Вывод
$ bash shuffled.sh
BMW White
Ford Yellow
Honda Black
Toyota Blue