Как создать вложенную последовательность в bash? - PullRequest
2 голосов
/ 05 мая 2020

Мне нужно создать вложенную последовательность в bash скрипте, например a1b1 a1b2 ab3 a2b1 a2b2 a2b3. Верхний предел обеих последовательностей будет взят через аргумент командной строки.

Я узнал о seq command, но с его помощью я могу создать только одну последовательность. Я использовал эту инструкцию echo $(seq -f "a%g" 8). Есть ли способ создать вложенную последовательность с помощью команды seq или любым другим способом. Примечание: я пробовал использовать раскрывающие скобки, но это не сработает, так как мне нужно взять ограничения из аргумента командной строки.

Ответы [ 4 ]

2 голосов
/ 05 мая 2020

Другой метод - использование GNU parallel (https://www.gnu.org/software/parallel/):

a=$(seq -f "a%g" 8)
b=$(seq -f "b%g" 8)
parallel echo {} ::: $a ::: $b

NB. Если вам нужен вывод в правильном порядке, используйте parallel --keep-order echo {} ::: $a ::: $b или направьте результаты в sort, например, parallel echo {} ::: $a ::: $b | sort

2 голосов
/ 05 мая 2020
$for i in $(seq 2); do for j in $(seq 3); do  echo "a${i}b${j}"; done; done;
a1b1
a1b2
a1b3
a2b1
a2b2
a2b3
$
1 голос
/ 05 мая 2020

Следующее делает вашу работу. Просто вам нужно реализовать какой-то механизм цикла

for i in `seq -f "a%g" 2`
do
   for j in `seq -f "b%g" 3`
   do
      echo $i$j
   done
done
0 голосов
/ 05 мая 2020

Просто расширение скобок из bash

printf '%s\n' a{1..2}b{1..3}

Вывод

a1b1
a1b2
a1b3
a2b1
a2b2
a2b3
...