2017-04-26 148 views
0

我感到困惑與awk的返回碼...AWK數值比較

命令:

cat /etc/redhat-release |awk '{print $3 >= 6.5;}' 

結果:1(應該是0或者我要找0)

這裏我的文件/ etc/redhat的釋放

cat /etc/redhat-release -> 
CentOS release 6.5 (Final) 

我這個有點困惑...

幫助...!


cat /etc/redhat-release |awk '{print $3 >= 6.5}' 

1 

cat /etc/redhat-release |awk '{print $3}' 

6.5 
+0

'$ 3'是'6.5','6.5> = 6.5'應該是'True',我的朋友。 '1'表示'真','0'表示'假'。 – luoluo

回答

0

看起來你的目的是要打印整個線時的版本(場3)> = 6.5。在awk表達式,條件應先採取行動,像這樣(無需cat ... |):

awk '$3 >= 6.5 {print}' /etc/redhat-release 

,因爲印刷是默認的動作,只是awk '$3 >= 6.5' /etc/redhat-release就足夠了(如Inian指出)。

命令

awk '{print $3 >= 6.5}' /etc/redhat-release 

給出1其輸出是表達式的值,作爲$3 >= 6.5評估爲真。

+1

您可以刪除'{print}'並且只是說'awk'$ 3> = 6.5'/ etc/redhat-release' – Inian

0

您的困惑可能源自您期望得到真實或錯誤比較的結果。

從gawk手冊;

在awk中,任何非零數值或任何非空字符串值都爲true。 任何其他值(零或空字符串,「」)爲false。

換句話說,如果該字段不是「0」或「」,這是真的。所以如果你正在尋找(期待)0,你期望的比較是錯誤的。

以下可能會幫助您控制您的比較,但仍不會使「0」成爲真正比較的結果。

要將字段值強制爲數字上下文,可以添加零或乘以1。 ($ 3 + 0)或($ 3 * 1),然後再比較數值。 要將字段值強制爲字符串上下文,可以使用空字符串連接。記住awk使用空格來連接。 ($ 3「」)