打印空行的awk

时间:2014-05-23 08:52:48

标签: bash printing awk null

我有一个问题。我在bash和awk中使用此代码:

#!/bin/bash
awk 'BEGIN {print "CHR\tSTART\tSTOP\tPOCET_READU\tGCcontent"}'
for z in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 

do 
export $z
for i in {0..249480000..60000}
    do
u=$i
let "u +=60000"
export $i 
export $u 

samtools view /home/filip/Desktop/AMrtin\ Hynek/highThan89MapQ.bam  chr$z:$i-$u | awk '{ n=length($10); print gsub(/[GCCgcs]/,"",$10)/n;}'| awk -v chr="chr"$z -v min=$i -v max=$u '{s+=$1}END{print chr,"\t",min,"\t",max,"\t",NR,"\t",s/NR}}'   
done 
done 

从这里我得到的结果如下:

  

chr1 60000 120000 30 0.333

     

chr3 540000 600000 10 0.555

循环步长为60000,但如果我除了s / NR,有时NR为0且该行不在输出中。谢谢我想得到如果NR = 0且s / NR不存在(因为我们不能除以0):

  

chr1 0 60000 N / A N / A

     

chr1 60000 120000 30 0.333

     

chr3 480000 540000 N / A N / A

     

chr3 540000 600000 10 0.555

我尝试使用像

这样的条件

{s+=$1}END{print chr,"\t",min,"\t",max,"\t",NR,"\t",s/NR; if (S/NR == "") print chr,"\t",min,"\t",max,"\t","N/A","\t","N/A"}' 但它不起作用。 你能帮帮我吗?

1 个答案:

答案 0 :(得分:1)

问题是你要除以零,这是一个错误。在进行除法之前,您需要先测试NR

awk -v chr="chr"$z -v min=$i -v max=$u '
    {s+=$1}
    END {print chr, "\t", min, "\t", max, "\t", (NR ? NR : "N/A"), "\t", (NR ? s/NR : "N/A")}'