Repetindo o argumento da linha de comando

2

Quero começar distinguindo os Repetindo o comando com nomes de arquivo diferentes não é o que eu estou perguntando.

A minha pergunta é, como você constrói um único comando com um diretório de nomes de arquivos nele, cada um prefixado com a parte --thingy do comando? No meu aplicativo específico, estou usando o GATK (embora essa questão seja sobre como criar a chamada da linha de comando) e, mais especificamente, GenotypeGVCFs . Meu problema é que o comando deve se parecer com:

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 linha --variant precisa ser repetida 93 vezes, cada uma com um caminho de arquivo diferente. Eles estão todos no mesmo diretório juntos, e todos eles têm a mesma extensão (* .g.vcf).

Eu olhei para fazer algo com find -exec + , mas não consegui pensar em uma maneira de colocar --variant em cada resultado. xargs também parece promissor, mas eu não entendo o que ele faz super bem, e por isso estava tendo problemas para configurá-lo. Neste ponto, talvez eu tenha apenas um script Python para gerar o comando e depois colá-lo no terminal, mas queria saber se existe uma maneira "correta" de fazer isso para o futuro.

    
por JPatnode 18.02.2016 / 19:21

2 respostas

3

Em teoria, isso pode ajudar, mas eu nunca tentei uma coisa dessas. Se eu fosse você, eu apenas testaria com algum tipo de comando echo antes de lançar o programa java .

java -jar GenomeAnalysisTK.jar \
-T GenotypeGVCFs \
-R reference.fasta \
$(for v in *.g.vcf;do echo --variant ${v}" \";done) -o output.vcf
    
por 18.02.2016 / 19:35
1

O truque é pegar a lista que você quer 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} em seu comando.

HTH.

    
por 18.02.2016 / 19:37