Как получить пары расширений фигурных скобок, не получая все комбинации? - PullRequest
0 голосов
/ 18 февраля 2019

Я работаю на macOS High Sierra 10.13.3.Моя оболочка bash.

Когда я печатаю, echo {1,2}{3,4}

я получаю: 13 14 23 24.

Можно ли получить только 13 24?

Я заинтересован в создании множества файлов, в которых два местоположения в файле различаются.Например, я хочу файлы:

file1file1 file2file2 file3file3

Было бы удобно написать что-то вроде file{1,2,3}file{1,2,3} option вместо file1file1 file2file2 file3file3.

Я бы хотел использовать это расширение в команде, например:

touch file{1,2,3}file{1,2,3} option для создания трех файлов.

Я надеюсь, что нужная мне функциональность понятна.

Уточнение

В конечном счете, контекст, в котором я хочу использовать эту функцию, - это команда snakemake:

snakemake --cores 3 release{42,43,44}/file{42,43,44}.txt

, где я хочу snakemakeдля создания файлов release42 / file42.txt, release43 / file43.txt и release44 / file44.txt.

Если для этого я использую цикл, файлы будут создаваться последовательно.Однако, введя snakemake release42/file42.txt release43/file43.txt release44/file44.txt, три файла будут созданы одновременно.Однако, поскольку я ленивый, я хочу набрать что-то короче, чем snakemake release42/file42.txt release43/file43.txt release44/file44.txt.

Ответы [ 2 ]

0 голосов
/ 18 февраля 2019

Использование цикла для формирования массива.

items=( )
for i in {42,43,44}; do
  items+=( "release$i/file$i.txt" )
done

snakemake "${items[@]}"

Он запускается snakemake только один раз со всеми перечисленными файлами.

0 голосов
/ 18 февраля 2019

чтобы получить 13 14 до

$ echo 1{3,4}

для дубликатов, есть другие способы

$ for i in {1..3}; do printf "file%dfile%d " $i $i; done
file1file1 file2file2 file3file3

для использования с touch

$ for i in {1..3}; do touch "file${i}file${i}"; done

или, используя все имена файлов одновременно

$ touch $(for i in {1..3}; do printf "file%dfile%d " $i $i; done)
...