我应该总是使用GAWK而不是AWK吗?

问题描述 投票:4回答:3

我发现AWK的所有功能都包含在GAWK中,除了使用没有安装GAWK的系统外,我是否应该使用AWK与GAWK? AWK的性能是否优于GAWK?

linux awk gawk
3个回答
6
投票

awk可以指很多东西。有awk-the-standard,有许多不同的实现,其中之一是gawk

不使用特定于实现的功能意味着您将有很高的机会在awk-the-language的其他实现上保持代码不变。

gawkawk-the-language的一种实现,声称符合awk-the-standard,同时增加了一些额外的功能。

$ man awk
…
DESCRIPTION
   Gawk is the GNU Project's implementation of the AWK programming
   language.  It conforms to the definition of the language in the
   POSIX 1003.1 Standard.  This version in turn is  based  on  the
   description in The AWK Programming Language, by Aho, Kernighan,
   and Weinberger.  Gawk provides the additional features found in
   the current version of Brian Kernighan's awk and  a  number  of
   GNU-specific extensions.
…

至于速度,使用gawk作为“普通”awk应该没有区别 - 通常,当安装gawk时,awk将只是gawk的符号链接,这意味着它们将是完全相同的程序。

但是,使用特定于gawk的功能意味着您将被锁定在该特定实现中 - 因此,如果(假设)您发现更快的实现,您可能必须调整脚本而不是仅仅交换二进制文件。 (可能有更快的实现,但我不知道,因为我从来没有需要让我的awk脚本运行得更快。)

就个人而言,我倾向于坚持“普通”awk而不使用gawk特有的功能,但如果你不关心切换到其他实现,使用gawk扩展可能会使你的脚本更容易编写并节省你的时间为此。


2
投票

现在最常见的AWK实现是gawk,可能第二个最常见的是mawk,至少因为它是debian上的系统AWK。

引用apt-cache show mawk的输出

Mawk比gawk更小,更快。它有一些编译时限制,例如NF = 32767和sprintf buffer = 1020。

在gawk方面,有更多深思熟虑的扩展,我认为,更好地管理错误和更好的错误消息,这是一个真正的奖金,当你调试复杂的脚本,可能是一个很好的理由使用gawk,即使你对它的扩展不感兴趣。

另一方面,如果你有一个调试过的脚本,如果你不需要一个特定的扩展,如果你可以忍受mawk的内置限制(这是很多ifs)你想要挤压最后一点性能离开AWK的舒适,然后mawk是要走的路。


0
投票

假设“AWK”是指任何不是gawk的awk - 不会。如果可能的话,总是使用gawk。如果它不在您的系统上,请安装它。

© www.soinside.com 2019 - 2024. All rights reserved.