Как запустить bash скрипт в a для l oop? - PullRequest
0 голосов
/ 31 января 2020

У меня есть несколько файлов .vcf.gz, которые выглядят так: (а их 22)

ALL.chr1.phase3_shapeit2_mvncall_integrated_v5a.20130502.genotypes.vcf.gz
ALL.chr2.phase3_shapeit2_mvncall_integrated_v5a.20130502.genotypes.vcf.gz
ALL.chr3.phase3_shapeit2_mvncall_integrated_v5a.20130502.genotypes.vcf.gz
...
ALL.chr22.phase3_shapeit2_mvncall_integrated_v5a.20130502.genotypes.vcf.gz

И у меня есть фильтр сценариев. sh, который может работать на одном файле, который выглядит так Как бы я oop через все эти 22 файла?

filter_and_convert ()
{
echo -ne "varID\t" 
bcftools view $1 -S $2 --force-samples -Ou |  bcftools query -l | tr '\n' '\t' | sed 's/\t$/\n/'       

#The first python inline script will check if a variant is blacklisted
NOW=$(date +%Y-%m-%d/%H:%M:%S)
echo "Starting at $NOW"
bcftools view -S $2 --force-samples $1 -Ou | \
bcftools query -f '%ID[\t%GT]\n' | \
awk '
{
for (i = 1; i <= NF; i++) {
    if (substr($i,0,1) == "c") {
        printf("%s",$i)
    } else if ( substr($i, 0, 1) == ".") {
        printf("\tNA")
    } else if ($i ~ "[0-9]|[0-9]") {
        n = split($i, array, "|")
        printf("\t%d",array[1]+array[2])
        } else {
        #printf("\t%s",$i)
        printf("Unexpected: %s",$i)
       exit 1
    }
}
printf("\n")
}
'

NOW=$(date +%Y-%m-%d/%H:%M:%S)
echo "Ending at $NOW"
}

filter_and_convert ALL.chr22.phase3_shapeit2_mvncall_integrated_v5a.20130502.genotypes.vcf.gz  samples.txt

Ответы [ 2 ]

2 голосов
/ 31 января 2020

Замените

filter_and_convert ALL.chr22.phase3_shapeit2_mvncall_integrated_v5a.20130502.genotypes.vcf.gz  samples.txt

на for l oop, который вызывает функцию для всех файлов, которые соответствуют шаблону.

for file in ALL.*.vcf.gz; do
    filter_and_convert "$file"  samples.txt
done
0 голосов
/ 31 января 2020
v="ALL.chr"
p=".phase3_shapeit2_mvncall_integrated_v5a.20130502.genotypes.vcf.gz"
for i in {1..22};
do
        file=$v$i$p
        bash filter.sh $file sample.txt
done

Используйте эту переменную файла с вашим скриптом. Он должен работать. Я предполагаю, что первый аргумент для вашего файлера. sh это имя файла. Остальную часть аргумента вы можете добавить

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...