Как быстро ввести большое количество строк в файл с помощью Bash

#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 last done , которое откроет файл только один раз. Тем не менее, комбинаторное расширение фигурных скобок, как в ответе @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. Отлично работает, это заняло всего около пяти секунд, значительное улучшение.