下一行以 { 开头的规则

下一行以 { 开头的规则

我正在执行以下操作,MATCH $0 BEG_ERE每行重复一次。主要是因为开头{从下一行开始。这会是一个错误吗?

match($0, beg_ere, maggr)
 {
  print "MATCH $0 BEG_ERE"
  print "   " $0
  next
 }

答案1

不,这不是一个错误 - 这是一个功能。

awk 程序由一系列对组成,rule { action }如果逻辑上为 TRUE,则{ action }执行该程序。rule不过,有两种特殊情况:

  1. 如果rule为空,则{ action }对每个记录执行,即默认情况下空规则被视为 TRUE

  2. 如果为空,则假定{ action }相当于的默认操作。{ print $0 }

所以你的程序,虽然语法正确,必须是相当于两个单独的规则-动作对

match($0, beg_ere, maggr) { print $0 }

1 {
  print "MATCH $0 BEG_ERE"
  print "   " $0
  next
 }

也可以看看如何防止从 awk 打印到标准输出脚本(不是来自 cli)

相关内容