2012-08-14 103 views
28
  1. 我正在使用AWK腳本來處理一些日誌。
  2. 在一個地方我需要檢查變量值是否爲null做出一些決定。

任何想法如何實現相同?如何檢查AWK腳本中的變量值是否爲空或空?

awk ' 

{ 
    { 
     split($i, keyVal, "@") 
     key=keyVal[1]; 
     val=keyVal[2]; 
     if(val ~ /^ *$/) 
     val="Y"; 

    } 

} 

' File 

我試圖與

1) if(val == "") 

2) if(val ~ /^ *$/) 

在這兩種情況下不能正常工作。

+0

您能否提供一些示例數據? – Levon 2012-08-14 13:10:04

回答

37

""的比較應該有工作,所以這是一個有點奇怪

作爲一個比較另類,你可以使用length()功能,如果是零,你的變量爲空/空。例如,

if (length(val) == 0) 

而且,也許是內置變量NF(多個字段)可以派上用場?由於我們無法訪問您的輸入數據,因此很難說,但另一種可能性。

+0

謝謝,長度(val)正在爲我工​​作。 – samarth 2012-08-14 14:04:24

9

它工作得很好,我

$ awk 'BEGIN{if(val==""){print "null or empty"}}' 
null or empty 

不能變量爲空和空區分開來,當您訪問「未設置」可變,AWK只是默認值初始化它(這裏是"" - 空字符串)。您可以使用某種解決方法,例如,在訪問它時將val_accessed變量設置爲0,然後設置爲1。或更簡單的方法(有點「hackish」)將val設置爲"unitialized"(或運行程序時不能顯示的其他值)。

PS:你的腳本對我來說看起來很奇怪,什麼是嵌套括號?

2

您可以直接使用該變量而無需進行比較,空/零/零值被認爲是false,其他一切都是true

在這裏看到:

# setting default tag if not provided 
if (! tag) { 
     tag="devf" 
} 

因此該腳本將有可變tag與價值devf除非用戶這樣稱呼它:

$ awk -v tag=custom -f script.awk targetFile 

這是真的爲: GNU Awk 4.1.3,API:1.1(GNU MPFR 3.1.4,GNU MP 6.1.0)

相關問題