5

这是 awk 中的一个基本问题。但我在这方面面临问题,我不知道为什么。问题是当我在一行中运行 awk 命令时,例如

awk 'BEGIN {} {print $0;}' FILE 

然后代码完美运行

但是,如果我在行之间拆分代码,例如

 awk '
 BEGIN
 {
 }
 {
      print $0;
 }' FILE

它给了我一个错误,指出BEGIN 应该有一个动作部分。我想知道,因为它与我正在格式化的代码相同,为什么会出现此错误。解决这个问题对我来说真的很重要,因为我会在 awk 中编写大行代码,我很难每次都格式化并把它放在一行中。你能帮我解决这个问题吗?谢谢你。笔记。我在 shell 环境中运行这个 awk

4

1 回答 1

5

添加'{' right after theBEGIN`,您将不会收到错误消息。

的开头括号{需要作为. 所以改变你所拥有的BEGINsameBEGIN

awk '
 BEGIN
 {

awk '
 BEGIN {

并且您不会收到错误消息。

手册确实声明“BEGIN 和 END 规则必须有操作;”,所以这可能是另一个问题。这

awk 'BEGIN {} ...

对我来说似乎有点奇怪(如果什么都没发生,真的没有理由这样做)

@Birei 下面的有用评论解释说,这些语句“解析的方式在两种情况下都会有所不同。'{'下一行中的 open 被解析为没有模式的操作(与 BEGIN 无关),而在同一行中表示开始规则。”

于 2012-07-17T20:19:31.083 回答