在命令行工具(如bcftools)中使用bash变量

问题描述 投票:-1回答:1

我有一个bash脚本,它接受参数,然后运行程序bcftools:

$infile = $1
$outfile = $2
$pop1 = $3
$pop2 = $4

我想使用pop1和pop2参数作为参数,因此在下面的命令中,AFR_AF将由pop1替换,而EUR_AF将由pop2替换:

bcftools view -i 'min(AFR_AF>0) & min(EUR_AF>0) & min(AFR_AF<1) & min(EUR_AF<1)' $infile > $outfile

但是,如果我使用与输入和输出文件相同的语法(例如$pop1,我会收到错误,因为bcftools无法识别变量。如何使用命令行变量作为其他工具的参数?

这是我的脚本:

#!/bin/bash

outFolder=$1
pop1=$2
pop2=$3
arr=($(seq 1 22 && echo X && echo Y))

for i in "${arr[@]}"; do
bcftools view -i 'min("$pop1">0) & min("$pop2">0) & min("$pop1"<1) & min("$pop2"<1)' chr"$i".vcf.gz |
bcftools query -f '%CHROM\t%POS\t%REF\t%ALT\t%AA[\t%GT]\n' | 
awk '{if(length($3)==1 && length($4)==1) print}' > $outFolder/"$i".txt; done

我用以下命令执行它:

./EHHparser1.sh EHH/ AFR_AF EUR_AF

并为每个循环重复此错误:

Wrong operator in string comparison: min("$pop1">0) & min("$pop2">0) & min("$pop1"<1) & min("$pop2"<1) [(null),$pop1]
bash arguments parameter-passing bioinformatics
1个回答
1
投票

我需要使用双引号而不是单引号,因为表达式不会在单引号中展开:

bcftools view -i "min($pop1>0) & min($pop2>0) & min($pop1<1) & min($pop2<1)" $infile > $outfile
© www.soinside.com 2019 - 2024. All rights reserved.