Комбинированный генератор с памятью и управлением ресурсами

У меня есть этот скрипт bash, который генерирует каждую комбинацию массивов в 5-значном формате:

#!/usr/bin/env bash for combo in \ {a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,0,1,2,3,4,5,6,7,8,9}\ {a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,0,1,2,3,4,5,6,7,8,9}\ {a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,0,1,2,3,4,5,6,7,8,9}\ {a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,0,1,2,3,4,5,6,7,8,9}\ {a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,0,1,2,3,4,5,6,7,8,9}; do echo $combo; done > output.txt 

Это приведет к выводу:

 $ ./script.sh aaaaa aaaab aaaac ... 

Однако это просто заморозит мой компьютер. Есть ли способ записать данные в файл все чаще? Кроме того, можно ли разделить вывод на разные файлы, например, на каждых 65536 строках? как output1.txt, output2.txt, output3.txt?

Спасибо за помощь!

5 Solutions collect form web for “Комбинированный генератор с памятью и управлением ресурсами”

Трудно сгенерировать эту большую перестановку, не удерживая огромную память в оболочке.

Вы можете попробовать другой язык, например Python:

 $ python -c ' import itertools, string l = [c for c in string.ascii_lowercase + string.digits] for p in itertools.product(l, l, l, l, l): print "".join(p) ' > file 

Вы можете использовать вложенные циклы, хотя они будут медленными:

 for p in {a..z} {0..9} do for q in {a..z} {0..9} do for r in {a..z} {0..9} do for s in {a..z} {0..9} do for t in {a..z} {0..9} do echo $p$q$r$s$t done done done done done | split -l 65536 --numeric-suffixes=1 --additional-suffix=.txt - output 

Я нашел хороший инструмент, называемый crunch который написан на C. У вас также есть опции для разделения выходных файлов по размеру или строкам файла!

Установить: $ sudo apt-get install crunch

 #!/usr/bin/env bash crunch 5 5 abcdefghijklmnopqrstuvwxyz0123456789 -o output/START -c 1048576 # Excel line limit 

Эта команда в выходной папке генерирует aaaaa-awrdd.txt, awrde-bi8gh.txt, bi8gi-b5pjl.txt, etc. Точно с 1.048.576 строк, что является лимитом Excel 2007+. Это также очень быстрое решение. генерируя 60.000.000+ комбинаций в 58 файлах, сделанных всего за 10 секунд! Отлично!

Для перестановок я использую следующий скрипт perl для генерации перестановок:

 #!/usr/bin/perl use strict; use Algorithm::Permute; my $q=shift or die("usage permgen n word-set\n"); my $p = new Algorithm::Permute([@ARGV],$q); while (my @res = $p->next) { print @res,"\n"; } 

Это можно использовать для создания перестановок очень разных наборов. Пример unicode dices:

 permgen 2 ⚀ ⚁ ⚂ ⚃ ⚄ ⚅ | shuf -n 2 ⚅⚄ ⚅⚁ 

Для генерации вашего (ОГРОМНОГО) примера нам нужно написать: permgen 5 {a..z} {0..9}

В моей старой машине требуется 2 с для создания 1_000_000 перестановок

time permgen 5 {a..z} {1..9}| head -1000000| wc

bash всегда будет выделять все элементы в ОЗУ, прежде чем перебирать их с помощью цикла for . Вы действительно просите bash выделить много ОЗУ сразу, а ваш компьютер просто не так много, поэтому он вылетает / зависает.

Сами комбинации сами по себе этого не требуют (мои вычисления в оболочке дают около 500 МБ), но я полагаю, что у bash есть большие накладные расходы при работе с массивами.

Интересно, сколько свободной памяти у вас действительно есть.

  • Bash - синтаксис в эхом
  • Как бы я запустил эту команду?
  • Выбирайте только каталоги и порядок с помощью эха
  • Как создать файл с несколькими строками из командной строки?
  • Транспортировка данных в FIFO с помощью EOFs каждую секунду
  • Запустить исполняемый файл с переменной в Bash
  • Можно ли сделать здесь-документ в одной строке или эхо-дословно?
  • Механизм символа BELL '\ a'?
  • Выделение строки без кавычек
  • Как я могу правильно обосновать выход переменной длины?
  • как `echo` 'отформатировал' man-страницу некоторой команды в текстовый файл
  • Interesting Posts

    Выполнить командную строку операции GUI?

    Регулярное выражение в Bash для проверки IP-адреса

    Как найти скрытый раздел USB в Linux

    Как я могу получить эту проприетарную камеру с низким разрешением, работающую в Linux?

    Приложение для голосового чата в Интернете

    заменить строку в цикле

    Как убить всех vpns на коммутаторе Mint 17.2

    Свободное дисковое пространство не правильно?

    Используется для FreeBSD, хочу узнать на OpenBSD, каковы основные различия, которые я должен ожидать при обучении?

    Могут ли шрифты Microsoft быть куплены и включены в ядро ​​Linux?

    манипуляция awk

    Kali VM зависает, когда TL-WN722N выбран как USB-устройство для виртуальной виртуальной машины VM

    Раздел все еще почти заполнен, но файлы, похоже, были потеряны. Что случилось?

    Как настроить общий SFTP-каталог для определенных пользователей, установленный с помощью s3fs?

    Как закрепить несколько каталогов в отдельные файлы zip

    Linux и Unix - лучшая ОС в мире.