我想用正则表达式初始化变量,然后将其用于模式匹配。结果并不如预期。所以,比如我有,在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,特别是确保你明白什么需要转义和多少次。 –