У меня нет parallel
, и я не очень понимаю, что делает ваш скрипт, поэтому я не могу проверить это. Но я верю, что это сработает, и может быть в стиле, который вы искали.
Перепишите скрипт, чтобы убрать циклы и принять аргументы :
#!/bin/bash
#parallel call SNPs with chromosomes by GATK
(to be safe, verify that "$#" is 3)
i="$1"
o="$2"
u="$3"
(if you want, verify that the arguments are valid)
gatk HaplotypeCaller \
︙ \
-L "chr$i$o$u" \
-O "GATK/HaplotypeCaller/HaploSample.chr$i$o$u.raw.vcf" &
gatk HaplotypeCaller \
︙ \
-L chrUn -O GATK/HaplotypeCaller/HaploSample.chrUn.raw.vcf &
Затем запустите его следующим образом :printf '%s\n' {1,2,3,4,5,6,7}' '{A,B,D}' '_part{1,2} | parallel -L1 (your_script)
Позвольте мне провести вас через это :{1,2,3}
расширяется до трех слов :1
, 2
и 3
. {1,2,3} {A,B}
расширяется до пяти слов :1
, 2
, 3
, A
и B
. {1,2,3}{A,B}
расширяется до шести слов :1A
, 1B
, 2A
, 2B
, 3A
и 3B
. {1,2,3}' '{A,B}
расширяется до шести слов :1 A
, 1 B
, 2 A
, 2 B
, 3 A
и 3 B
. Обратите внимание, что эти «слова» содержат пробелы. {1,2,3,4,5,6,7}' '{A,B,D}' '_part{1,2}
расширяется до 42 (7×3×2 )слов, каждый из которых включает два пробела. printf '%s\n'
выводит каждое «слово» на отдельной строке. Но помните, мы говорим о «словах» с пробелами в них. В результате он печатает два или три обычных (не -пробела )слов в строке. Например, $ printf '%s\n' {1,2,3}' '{A,B}
1 A
1 B
2 A
2 B
3 A
3 B
На данный момент это обычные пространства; они больше не котируются. -L1
указывает parallel
запустить вашу программу с данными из одной строки. Он разорвет линию на пробелы, и получить набор из трех аргументов.