0

据我所知,这是:

$2 > 50{print}

功能与此完全相同:

{if ($2 > 50) print}

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

4

4 回答 4

2

主要是风格。第一个例子是规范的 AWK。当然,有时if需要声明。

考虑一下:

$2 > 50 {foo; print}

需要 20 个字符,而以下内容需要 27 个字符:

{if ($2 > 50) {foo; print}}

如果删除空格,则为 16 对 22 个字符。

因此,如果您对经济感兴趣(无论是在实际角色方面还是在视觉方面),前者更可取。

正如 potong 所指出的,if如果有多个语句(如我在上面的第二个示例中所示),则表单需要花括号。如果只有一个语句,它们是可选的。如果它是在没有添加的情况下编写的,并且稍后添加了额外的语句而不添加大括号,这就是微妙错误的来源。此外,对于脚本的读者来说,如果包含大括号,则意图会更加清晰。

于 2012-05-22T00:50:57.460 回答
2

在我看来,第二个更具可读性(特别是对于可能必须维护您的代码的非 awk 专家)。

于 2012-05-22T00:43:06.377 回答
1

是的,它们是一样的。与大多数语法替代品一样,也有权衡取舍。

我主要同意 John3136 的观点,即第二种形式更有可能被具有 c、c++、C#、java 等背景的人理解。

正如丹尼斯威廉姆森指出的那样,有时您必须使用if (...)表格。

对于单行,我认为第一种形式是有用的、可接受的,并且有助于加强 awk 的主要设计,即 [pattern]-[action](可选或提供默认行为)。

如果您查看 comp.lang.awk,您会发现老用户大多更喜欢样式 1。

在我看来,样式 1 的大块代码很难阅读,但确实具有 lex 代码的外观。

所以.... 取决于 ;-) .... 您是否正在编写最终将由可能的非 awk 专家维护的代码?然后坚持 w 风格 2。为自己写作?两者都用,以免生锈!

我希望这有帮助。

于 2012-05-22T00:50:53.117 回答
1

是的,它们是一样的。

在第一个表单中,您可以省略{ print },因为它是默认操作。所以,这也有效:

$2 > 50
于 2012-05-22T03:53:11.530 回答