在awk中,括号内部或内部的放置条件之间是否存在功能差异?

时间:2012-05-22 00:39:35

标签: awk

据我所知,这是:

$2 > 50{print}

的功能与此完全相同:

{if ($2 > 50) print}

我什么时候应该使用其中一个,还是风格问题?

4 个答案:

答案 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