在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 ; } 
'

/pattern/结构检查$0是否匹配给定的模式,因此您的原始代码相当于说:

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

由于BEGIN部分$0为空,因此item_code_pattern设置为0

您需要删除$/符号(并且不需要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 }是默认规则,所以它是多余的。

最新更新