#file #bash
#файл #bash
Вопрос:
Мне нужно создать кучу перестановок букв, за которыми следуют цифры, и поместить их в файл. У меня есть куча вложенных циклов for , как показано ниже, а затем я повторяю его в файл, но это происходит очень медленно, примерно через час или больше (я слишком ленив, чтобы понять, как долго). Как я могу сделать это быстрее, я думаю, что медленная часть заключается в том, что я открываю и закрываю файл много раз.
for a in {a..z}
do
for b in {a..z}
do
for c in {a..z}
do
for i in {1..100}
do
echo "$a$b$c$i" >> permutations
done
done
done
done
Да, я знаю, что Bash — не лучший язык для этого, но это то, что я должен использовать.
Есть идеи?
Комментарии:
1. Минимальное изменение вашего первоначального решения — перейти
>> permutations
к after the lastdone
, которое откроет файл только один раз. Тем не менее, комбинаторное расширение фигурных скобок, как в ответе @Anders Lindahl, конечно, самый элегантный способ.
Ответ №1:
Расширение фигурных скобок Bash может сделать это:
echo {a..z}{a..z}{a..z}{1..100} > permutations
Если вы хотите, чтобы каждая перестановка в новой строке добавлялась, вы можете добавить замену:
echo {a..z}{a..z}{a..z}{1..100} | sed -e "s/ /n/g" > permutations
Комментарии:
1. Второй можно сократить до:
printf '%sn' {a..z}{a..z}{a..z}{1..100}
.2. Отлично работает, это заняло всего около пяти секунд, значительное улучшение.