据我所知,这是:
$2 > 50{print}
功能与此完全相同:
{if ($2 > 50) print}
我什么时候应该使用一个与另一个,还是风格问题?
主要是风格。第一个例子是规范的 AWK。当然,有时if
需要声明。
考虑一下:
$2 > 50 {foo; print}
需要 20 个字符,而以下内容需要 27 个字符:
{if ($2 > 50) {foo; print}}
如果删除空格,则为 16 对 22 个字符。
因此,如果您对经济感兴趣(无论是在实际角色方面还是在视觉方面),前者更可取。
正如 potong 所指出的,if
如果有多个语句(如我在上面的第二个示例中所示),则表单需要花括号。如果只有一个语句,它们是可选的。如果它是在没有添加的情况下编写的,并且稍后添加了额外的语句而不添加大括号,这就是微妙错误的来源。此外,对于脚本的读者来说,如果包含大括号,则意图会更加清晰。
在我看来,第二个更具可读性(特别是对于可能必须维护您的代码的非 awk 专家)。
是的,它们是一样的。与大多数语法替代品一样,也有权衡取舍。
我主要同意 John3136 的观点,即第二种形式更有可能被具有 c、c++、C#、java 等背景的人理解。
正如丹尼斯威廉姆森指出的那样,有时您必须使用if (...)
表格。
对于单行,我认为第一种形式是有用的、可接受的,并且有助于加强 awk 的主要设计,即 [pattern]-[action](可选或提供默认行为)。
如果您查看 comp.lang.awk,您会发现老用户大多更喜欢样式 1。
在我看来,样式 1 的大块代码很难阅读,但确实具有 lex 代码的外观。
所以.... 取决于 ;-) .... 您是否正在编写最终将由可能的非 awk 专家维护的代码?然后坚持 w 风格 2。为自己写作?两者都用,以免生锈!
我希望这有帮助。
是的,它们是一样的。
在第一个表单中,您可以省略{ print }
,因为它是默认操作。所以,这也有效:
$2 > 50