2013-06-01 25 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

相关问题