使用带有Awk的数组

时间:2016-01-14 19:30:08

标签: bash awk

我正在使用一组值,我想使用awk和输出到文件来查找这些值。在awk行中,如果我用数字本身替换第一个"$i",则脚本可以正常工作,但是当我尝试使用变量"$i"时,脚本将不再有效。

declare -a arr=("5073770" "7577539")
for i in "${arr[@]}"
do
    echo "$i"

    awk -F'[;\t]' '$2 ~ "$i"{sub(/DP=/,"",$15); print $15}' $INPUT >> "$i"
done

我正在查看的文件包含许多行,如下所示:

chr12   3356475 .   C   A   76.508  .   AB=0;ABP=0;AC=2;AF=1;AN=2;AO=3;CIGAR=1X;DP=3;DPB=3;DPRA=0;EPP=9.52472;EPPR=0;GTI=0;LEN=1;MEANALT=1;MQM=60;MQMR=0;NS=1;NUMALT=1;ODDS=8.76405;PAIRED=0;PAIREDR=0;PAO=0;PQA=0;PQR=0;PRO=0;QA=111;QR=0;RO=0;RPP=9.52472;RPPR=0;RUN=1;SAF=3;SAP=9.52472;SAR=0;SRF=0;SRP=0;SRR=0;TYPE=snp GT:DP:RO:QR:AO:QA:GL    1/1:3:0:0:3:111:-10,-0.90309,0

3 个答案:

答案 0 :(得分:1)

使用$i将值-v传递给awk:

awk -F'[;\t]' -v var="$i" '$2 ~ var{sub(/DP=/,"",$15); print $15}' $INPUT >> "$i"

答案 1 :(得分:1)

除非你明确地将它作为变量传递给awk,否则awk将不知道shell的$ i的值是什么

awk  -F'[;\t]' -v "VAR=${i}"  '$2 ~ VAR {....

我希望您看到的结果是因为'i'未定义并被视为零 这使你的测试'$ 2~ $ 0 {...

答案 2 :(得分:1)

您可以避免使用awk并在BASH中执行此操作:

arr=("5073770" "7577539" "3356475")

for i in "${arr[@]}"; do
   while IFS='['$'\t'';]' read -ra arr; do
      [[ ${arr[1]} == *$i* ]] && { s="${arr[14]}"; echo "${s#DP=}"; }
   done < "$INPUT"
done