我想用正则表达式初始化一个变量,然后用它来进行模式匹配。结果并不如预期的那样。所以例如我有,
BEGIN {
item_code_pattern=/ITM-CD-10/ ;
}
$0 ~ $item_code_pattern{ print ; }
我看到没有像 ITM-CD-10 这样的模式的记录也在输出中。请在块之前建议正确的布尔表达式。
谢谢
我想用正则表达式初始化一个变量,然后用它来进行模式匹配。结果并不如预期的那样。所以例如我有,
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 ; }
'
该/pattern/
构造检查是否$0
与给定模式匹配,因此您的原始代码相当于说:
item_code_pattern = $0 ~ "ITM-CD-10"
由于在节中$0
为空,因此设置为 0。BEGIN
item_code_pattern
您需要删除$
和/
符号(并且不需要 BEGIN 块,只需在命令行上分配变量):
awk '$0 ~ item_code_pattern' item_code_pattern=ITM-CD-10
使用时$
,有些版本的 awk 会发出错误,而其他版本会默默地将变量转换为整数值 0,因此与 0$item_code_pattern
完全相同$0
,并且代码$0 ~ $item_code_pattern
是重言式$0 ~ $0
。
如果您坚持使用 BEGIN 块,则语法为:
BEGIN { item_code_pattern="ITM-CD-10" }
$0 ~ item_code_pattern
请注意,这{ print }
是没有给出规则时的默认规则,所以它是多余的。