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