2014-05-23 95 views
0

我有一个问题。我使用bash和AWK验证码:打印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):

CHR 1 0 60000 N/AN/A

CHR1 60000 120000 30 0.333

CHR 3 480000 540000 N/AN/A

CHR 3 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"}' 但它不工作。 你能帮我吗?

+0

我收到在终端这句法:./name_of_my_script.sh:第20行:出口:'1380000' :不是一个有效的标识符 – Vonton

+0

它应该是'出口z',不'$出口z'。但为什么你需要导出变量呢?您没有任何可以访问环境变量的子进程。 – Barmar

+0

如果我不把它从bash导出到awk,我不能在awk中打​​印它。如果我改变它,我得到相同的结果没有NR == 0 – Vonton

回答

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")}' 
+0

哦,真的很感谢你,它的工作原理。我尝试删除所有导出,并且它也可以工作。感谢您的帮助。 – Vonton