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


36

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

Answers:


36

awk - 最常见的,将出现在大多数类Unix系统上,最旧的版本和较新的版本。

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

nawk - 当AWK语言被开发时,作者发布了一个新版本(因此是n - n ew awk)以避免混淆。可以把它想象成AWK的Python 3.0。

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

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


3
原始awk不存在于我可用的任何类Unix系统上。通常,/usr/bin/awk会运行nawk,gawk或BusyBox awk(类似于gawk的行为)。
dubiousjim

9
截至2012年底,Ubuntu / Debian系统默认安装mawk。命令行file /etc/alternatives/awksymbolic link to /usr/bin/mawk
Mike Sherrill'Cat Recall'

MAWK是否具有所有GAWK功能,例如真正的多维数组?
WYSIWYG 2013年

1
@JordonBedwell是的..有:正则表达式重复是不可能的mawk。它也不支持多维数组。
所见即所得2015年

1
@dubiousjim Ubuntu在Universe存储库中有原始awk。
jarno 2015年

5

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

-F参数也由此强制要求


1
...但请注意检查标准,告诉您可以使用什么来确保与其他版本的兼容性。例如,不要使用gensub(),测试awk- > gawk,并认为你很好去...
dmckee

1
@dmckee,您可以gawk --posix根据POSIX标准使用gawk工作。它还会检查您的脚本是否符合标准。你可以awk --posix '' 2>/dev/null在Ubuntu中使用,无论是gawk,mawk还是original-awk都用作awk,但是posix-option只能被gawk识别。--posix必须是原始awk的最后一个选项。你可以使用awk -W posix ''gawk和mawk。
jarno 2015年

1
@dmckee,哦mawk --posix ''失败,如果你使用mawk 1.3.3,但成功的错误消息,如果你使用mawk 1.3.4
jarno

0

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


不必总是符号链接; 有时它很难相关。
dubiousjim

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.