
Quero começar distinguindo queRepetindo comando com nomes de arquivos diferentesnão é o que estou perguntando.
Minha pergunta é: como você cria um único comando com um diretório de nomes de arquivos, cada um prefixado com a parte --thingy do comando? Na minha aplicação específica, estou usando GATK (embora esta questão seja sobre como construir a chamada de linha de comando) e ainda mais especificamenteGenótipoGVCFs. Meu problema é que o comando deve ficar assim:
java -jar GenomeAnalysisTK.jar \
-T GenotypeGVCFs \
-R reference.fasta \
--variant sample1.g.vcf \
--variant sample2.g.vcf \
-o output.vcf
mas tenho 93 arquivos variantes e, portanto, a --variant
linha precisa ser repetida 93 vezes, cada uma com um caminho de arquivo diferente. Eles estão todos no mesmo diretório e todos têm a mesma extensão (*.g.vcf).
Eu tentei fazer algo, find -exec +
mas não consegui pensar em uma maneira de anexar --variant
cada resultado. xargs
também parece promissor, mas não entendo muito bem o que ele faz e, por isso, estava tendo problemas para configurá-lo. Neste ponto, posso apenas fazer com que um script Python gere o comando e depois colá-lo no terminal, mas queria saber se existe uma maneira "correta" de fazer isso no futuro.
Responder1
Em teoria, isso pode ajudar, mas nunca tentei tal coisa. Se eu fosse você, testaria echo
primeiro com algum tipo de comando, antes de iniciar o java
programa.
java -jar GenomeAnalysisTK.jar \
-T GenotypeGVCFs \
-R reference.fasta \
$(for v in *.g.vcf;do echo --variant ${v}" \\";done) -o output.vcf
Responder2
O truque é obter a lista desejada e manipular cada elemento. Tente mudar para o diretório com seus arquivos variantes e algo como
FILES=$(ls | sed 's/^/--variant /')
echo ${FILES}
Em seguida, basta substituir ${FILES} no seu comando.
HTH.