
Я хочу начать с того, чтобы выделить то, чтоПовторение команды с разными именами файловэто не то, о чем я спрашиваю.
Мой вопрос в том, как создать одну команду с каталогом имен файлов в ней, каждое из которых начинается с части команды --thingy? В моем конкретном приложении я использую GATK (хотя этот вопрос касается создания вызова командной строки), и даже более конкретноГенотипGVCF. Моя проблема в том, что команда должна выглядеть так:
java -jar GenomeAnalysisTK.jar \
-T GenotypeGVCFs \
-R reference.fasta \
--variant sample1.g.vcf \
--variant sample2.g.vcf \
-o output.vcf
но у меня 93 варианта файлов, поэтому --variant
строку нужно повторить 93 раза, каждый с другим путем к файлу. Они все находятся в одном каталоге вместе, и у всех у них одинаковое расширение (*.g.vcf).
Я пытался сделать что-то с помощью find -exec +
, но не смог придумать способ прикрепить --variant
к каждому результату. xargs
тоже кажется многообещающим, но я не очень хорошо понимаю, что он делает, и поэтому у меня возникли проблемы с его настройкой. На этом этапе я мог бы просто заставить скрипт Python сгенерировать команду, а затем просто вставить ее в терминал, но я хотел бы узнать, есть ли «правильный» способ сделать это в будущем.
решение1
Теоретически это может помочь, но я никогда не пробовал такое. Если бы я был вами, я бы echo
сначала проверил это с помощью какой-нибудь команды, перед запуском java
программы.
java -jar GenomeAnalysisTK.jar \
-T GenotypeGVCFs \
-R reference.fasta \
$(for v in *.g.vcf;do echo --variant ${v}" \\";done) -o output.vcf
решение2
Хитрость в том, чтобы получить нужный вам список и манипулировать каждым элементом. Попробуйте перейти в каталог с вашими вариантными файлами и что-то вроде
FILES=$(ls | sed 's/^/--variant /')
echo ${FILES}
Затем просто подставьте ${FILES} в вашу команду.
НТН.