2014-05-23 124 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