Bash变量在AWK中导致语法错误

时间:2018-09-06 01:45:26

标签: bash awk

我遇到以下错误

awk: cmd. line:1: {if(NR%4==2) print length(.)}
awk: cmd. line:1:                           ^ syntax error

运行sh s.sh .

#!/bin/bash
#usage: sh afterqc_pbs.sh /work/waterhouse_team/All_RawData/Banana_Each_Cell_Raw/Banana_Illumina/QUT_WT_GN366_4 

for r1 in $(find $1 -name "*R1*.gz");
do
  base=${r1%_R1*}
  echo $base
  output=$(basename $(echo $r1 | sed 's/R1//g'))
  r2=$(echo $r1 | sed 's/R1/R2/g')
  echo $r1
  echo $r2 


  #cat <<EOF
  qsub <<EOF
#!/bin/bash -l

#PBS -N $output
#PBS -l walltime=48:00:00
#PBS -j oe
#PBS -l mem=50G
#PBS -l ncpus=1
#PBS -M m.lorenc@qut.edu.au
##PBS -m bea

cd \$PBS_O_WORKDIR

echo "Average\n"
zcat $r1 | awk '{if(NR%4==2) {count++; bases += length} } END{print bases/count}'

echo "Distribution\n"
zcat $r1 | awk '{if(NR%4==2) print length($1)}' | sort -n | uniq -c


EOF

done

awk怎么可能不选择.而不是长度?

谢谢。

1 个答案:

答案 0 :(得分:2)

问题是您使用qsub <<EOF。当您使用<<(称为“ here document”或“ heredoc”)时,其中的所有变量都会扩展。围绕它们的单引号不计算在内,因为heredoc具有优先权。如果要更改此设置,请将<<EOF更改为<<"EOF"https://www.gnu.org/software/bash/manual/bashref.html#Here-Documents有更多详细信息。