LINUX.ORG.RU

Генерировать последовательные строки

 , ,


0

2

Здравствуйте, подскажите способ сгенерировать следующую строки:

blabla[AA]blabla[A]

blabla[AA]blabla[B]

...

blabla[AB]blabla[B]
т.е. часть blabla является статической, части в [] динамические. В динамический частях нужно что бы генерировались последовательно буквы (A-Z), т.е. AAA, AAB, ..., BAA и т.д.



Последнее исправление: hama (всего исправлений: 1)

берешь размер нужного алфавита и счетчик от 0 до размер^3, для каждой итерации делишь на квадрат размера - это индекс старшего символа, на размер - это средний символ, а остаток - это индекс младшего символа

Deleted
()
Ответ на: комментарий от Deleted

А на эту тему есть уже man bash (хотя лучше info bash)

Xenius ★★★★★
()
Ответ на: комментарий от Xenius

В данном примере главная задержка - из-за неэкранированных квадратных скобок: bash пытается сделать 'Pathname Expansion' для каждого полученного из 'Brace Expansion' параметра.
А 'printf', может быть, и медленнее 'echo', но ненамного, и уж всяко быстрее вызова любой внешней команды.
Что, впрочем, тоже несущественно при однократном применении.

ABW ★★★★★
()
Ответ на: комментарий от ABW

А 'printf', может быть, и медленнее 'echo', но ненамного, и уж всяко быстрее вызова любой внешней команды.

Примерно одинаково по времени, если сравнить мою и твою команду и всё-таки экранировать квадратные скобки.

Xenius ★★★★★
()
Ответ на: комментарий от Xenius

71sec VS 4.7sec

$ time bash -c 'echo foo[{A..Z}]yyy[{A..Z}]xxx[{A..Z}]bar[{A..Z}] | tr " "  "\n"' > /dev/null

real	1m11.053s
user	0m54.668s
sys	0m16.244s


time ./z1.sh > /dev/null

real	0m4.696s
user	0m4.432s
sys	0m0.260s

#!/bin/bash

XXX=`echo {A..Z}`

for a in $XXX; do
	for b in $XXX; do
		for c in $XXX; do
			for d in $XXX; do
				echo "foo${a}yyy${b}xxx${c}bar${d}"
			done
		done
	done
done
anonymous
()
Ответ на: комментарий от anonymous

Поставь перед всеми [ и ] обратные слеши и попробуй ещё раз.

Xenius ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.