awk,mawk,nawk,gawk……什么?

44 unix awk

我刚刚开始学习 awk,我对周围的所有版本都有些困惑。在所有类 Unix 系统上是否有任何“版本”?就像,你知道,普通的 vi?标准 awk 是否支持 -F 选项?

Joh*_*n T 44

awk - 最常见的,可以在大多数类 Unix 系统上找到,最旧的版本,但不如新版本。

mawk - 其代码库基于字节码解释器的快速 AWK 实现。

NAWK -而AWK语言正在制定发布了一个新版本的(因此笔者ñ - ñ EW AWK),以避免混淆。把它想象成 AWK 的 Python 3.0。

gawk - GNU awk 的缩写。开发人员尝试添加 i18n 支持的唯一版本。允许用户编写自己的 C 共享库以使用自己的“插件”对其进行扩展。此版本是 Linux 的标准实现,原始 AWK 是为 Unix v7 编写的。

还有其他版本,如jawk(java 实现)、bwk(Brian W. Kernighan 的实现)等。

  • 截至 2012 年底,Ubuntu/Debian 系统默认安装 mawk。命令行 `file /etc/alternatives/awk` 返回 `symbolic link to /usr/bin/mawk` (11认同)
  • 原始 awk 不存在于我可用的任何类 Unix 系统上。通常,`/usr/bin/awk` 会运行 nawk、gawk 或 BusyBox awk(行为类似于 gawk)。 (3认同)
  • @JordonBedwell 是的.. 有:在mawk 中不可能重复正则表达式。它也不支持多维数组。 (2认同)

Joe*_*oey 6

你可以只使用awk. 它由 POSIX 定义,因此必须存在于所有符合 POSIX 的系统上。

-F参数也该参数强制要求

  • ...但请注意检查标准,以了解可以使用什么来确保与其他版本的兼容性。例如,不要使用 `gensub()`,使用 `awk` --> `gawk` 进行测试,然后认为您已经准备好了...... (2认同)
  • @dmckee,您可以使用 `gawk --posix` 使 gawk 根据 POSIX 标准工作。它还检查您的脚本是否符合标准。不管怎样,在Ubuntu中你都可以使用`awk --posix '' 2>/dev/null`,如果gawk、mawk或original-awk被用作awk,但posix选项只能被gawk识别。--posix 必须是original-awk 的最后一个选项。您可以将 `awk -W posix ''` 与 gawk 和 mawk 一起使用。 (2认同)

Mat*_*ley 2

awk将出现在几乎所有基于 *NIX 的系统上,但它支持的具体细节会略有变化,因为它完全有可能只是符号链接到不同的版本,类似于/bin/sh通常链接到特定 shell 的方式,通常bash或其中之一它的衍生物。(根据记录,我也知道很多vi有符号链接的机器vim。)