繁体   English   中英

Bash变量在awk内引起语法错误[重复]

[英]Bash variable caused syntax error inside awk [duplicate]

这个问题已经在这里有了答案:

我收到以下错误

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怎么可能不启动. 而不是长度?

先感谢您。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM