Репликация и расширение флагов программы в скрипте BASH - PullRequest
0 голосов
/ 07 июня 2019

Я работаю с программой, которая объединяет отдельные файлы, и я включаю эту программу в конвейер BASH, который я собираю. Программа требует флаг для каждого файла, например так:

program -V file_1.g.vcf -V file_2.g.vcf -V file_3.g.vcf -O combined_output.g.vcf

Чтобы скрипт мог работать с любым количеством сэмплов, я хотел бы прочитать имена отдельных файлов в каталоге и расширить путь для каждого файла после флага '-V'.

Я попытался добавить пути к файлам в следующую переменную, но не смог добиться правильного расширения:

GVCFS=('-V' `ls gvcfs/*.g.vcf`)

Любая помощь очень ценится!

Ответы [ 2 ]

2 голосов
/ 07 июня 2019

Вы можете сделать это с помощью цикла, чтобы заполнить массив параметрами:

options=()
for file in gvcfs/*.g.vcf; do    # Don't parse ls, just use a direct wildcard expression
    options+=(-V "${file##*/}")    # If you want the full path, leave off ##*/
done

program "${options[@]}" -O combined_output.g.vcf
0 голосов
/ 07 июня 2019

printf может помочь:

options=( $(printf -- "-V %s " gvcfs/*.g.vcf ) )

Хотя это не будет корректно работать с пробелами в именах файлов.Также рассмотрим realpath для генерации абсолютных имен файлов.

...