2013-06-01 30 views
2

我想用正則表達式初始化變量,然後將其用於模式匹配。結果並不如預期。所以,比如我有,在awk中使用變量初始化正則表達式

BEGIN { 
    item_code_pattern=/ITM-CD-10/ ; 
    } 

    $0 ~ $item_code_pattern{ print ; } 

我看到那些沒有圖案,ITM-CD-10的記錄也被輸出來。 請建議塊之前應該是什麼正確的布爾表達式。

感謝

+0

讀http://www.gnu.org/software/gawk/manual/ gawk.html#Computed-Regexps,特別是確保你明白什麼需要轉義和多少次。 –

回答

2

您需要刪除$/符號(有沒有需要一個BEGIN塊,剛剛分配在命令行中的變量):

awk '$0 ~ item_code_pattern' item_code_pattern=ITM-CD-10 

當您使用$ ,awk的某些版本會發出錯誤,而其他版本會默默地將該變量轉換爲整數值0,因此$item_code_pattern$0完全相同,並且代碼$0 ~ $item_code_pattern是同義詞$0 ~ $0

如果你堅持使用BEGIN塊,語法是:

BEGIN { item_code_pattern="ITM-CD-10" } 
$0 ~ item_code_pattern 

注意{ print }是當沒有規則給出的默認規則,因此它是多餘的。

3

你想用一個普通字符串:

awk ' 
    BEGIN { 
    item_code_pattern = "ITM-CD-10" ; 
    } 

    $0 ~ $item_code_pattern { print ; } 
' 

/pattern/結構檢查是否$0給定的模式匹配,所以你的原代碼相當於說:

item_code_pattern = $0 ~ "ITM-CD-10" 

由於$0是空的在BEGIN部分,item_code_pattern設置爲0

相關問題