【发布时间】:2018-08-31 00:36:27
【问题描述】:
我有一个 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]
【问题讨论】:
-
添加一个shebang,然后将您的脚本粘贴到那里:shellcheck.net
-
请在此处提供有关您的脚本的更多详细信息,并粘贴您在运行脚本时遇到的确切错误。
-
嗨,我已经添加了我的脚本、运行它的命令和错误。谢谢。
标签: bash arguments parameter-passing bioinformatics