我想用正則表達式初始化變量,然後將其用於模式匹配。結果並不如預期。所以,比如我有,在awk中使用變量初始化正則表達式
BEGIN {
item_code_pattern=/ITM-CD-10/ ;
}
$0 ~ $item_code_pattern{ print ; }
我看到那些沒有圖案,ITM-CD-10的記錄也被輸出來。 請建議塊之前應該是什麼正確的布爾表達式。
感謝
我想用正則表達式初始化變量,然後將其用於模式匹配。結果並不如預期。所以,比如我有,在awk中使用變量初始化正則表達式
BEGIN {
item_code_pattern=/ITM-CD-10/ ;
}
$0 ~ $item_code_pattern{ print ; }
我看到那些沒有圖案,ITM-CD-10的記錄也被輸出來。 請建議塊之前應該是什麼正確的布爾表達式。
感謝
您需要刪除$
和/
符號(有沒有需要一個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 }
是當沒有規則給出的默認規則,因此它是多餘的。
你想用一個普通字符串:
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
讀http://www.gnu.org/software/gawk/manual/ gawk.html#Computed-Regexps,特別是確保你明白什麼需要轉義和多少次。 –