2012-02-03 93 views
1

我從我的awk命令中得到一個除錯爲0的錯誤。我不確定是什麼原因造成的,因爲結果不應該是0.AWK除零錯誤

在這種情況下,它應該從1.7229/1.5444打印1.11557887。

它是如何分配變量的問題?

這是我的腳本:

#!/usr/bin/awk -f 

FNR == 22 { measC = $2 } 
FNR == 23 { refC = $2 } 
factorC = refC/measC 
{ print factorC } 

它返回:

/usr/bin/awk: division by zero 
input record number 1, file 1.txt 
source line number 5 

這是我輸入的數據是這樣的:

#!xxx x 
# x x x x x x 
# x: x x 
# x: x x 
# x: x x x x x 
# (x) x x, x x x, x. 
x: x x x x 
x: 3.0.0 
x: x 
x: 0 
x: x x 
x: 0 
x: x x 
x: x 
x: 0 
x: 0 
x: 2 
x: x x x 
x: x 
x: 1 
x: 4 
origmax: 1.5444 1.5188 1.0221 1.4932 
currentmax: 1.7229 1.6888 1.1069 1.6238 

回答

5

因爲你把塊的factorC = refC/measC外,awk認爲你想使用該表達式作爲模式。所以它會評估每行輸入的表達式。在第一行輸入中,measC尚未定義,因此它默認爲零。

我想你想要這樣的:

#!/usr/bin/awk -f 

FNR == 22 { measC = $2 } 
FNR == 23 { refC = $2 } 
END { 
    factorC = refC/measC 
    print factorC 
} 

或本:

#!/usr/bin/awk -f 

FNR == 22 { measC = $2 } 
FNR == 23 { 
    refC = $2 
    factorC = refC/measC 
    print factorC 
} 
2

你的腳本說:

FNR == 22 { measC = $2 } 

所以......只有當,比方說,五線你的輸入文件已被這個awk腳本讀取,measC的值是多少?

我會告訴你一個祕密。它將是零。因爲沒有任何東西給measC分配任何東西。

而且,你行:

factorC = refC/measC 

是塊之外,因此它被用於評估{ print factorC }是否應運行。並且因爲它是條件,它會爲每一行運行。你不知道嗎,在第22行之前,measC爲0.

我不理解數據或輸出,所以我不知道measC應該是什麼,如果有的話。

你想用這個做什麼?