什么是 awk?

awk 以其强大的处理和解释文本文件数据的能力而闻名。

Woman programming

WOCinTech Chat。由 Opensource.com 修改。CC BY-SA 4.0

awk 是一种编程语言,也是 1977 年起源于 AT&T 贝尔实验室的 POSIX 规范。它的名字来源于其设计者的首字母:Aho、Weinberger 和 Kernighan。awk 具有用户定义的函数、多个输入流、TCP/IP 网络访问以及丰富的正则表达式集。它通常用于处理原始文本文件,将找到的数据解释为记录和字段,供用户操作。

在其最基本的形式中,awk 在文件中搜索包含用户指定模式的文本单元(通常是以行尾字符结尾的行)。当一行与其中一个模式匹配时,awk 对该行执行一组用户定义的操作,然后处理输入行,直到输入文件结束。

[下载 awk 速查表]

awk 既可以用作命令,也可以用作解释型脚本。单行命令很流行且有用,可以过滤文件或输出流的输出,或者作为独立的命令。awk 甚至具有某种交互模式,因为在没有输入的情况下,它会对用户在终端中键入的任何行起作用。

$ awk '/foo/ { print toupper($0); }'
This line contains bar.
This line contains foo.
THIS LINE CONTAINS FOO.

然而,awk 是一种编程语言,具有用户定义的函数、循环、条件语句、流程控制等等。它作为一种语言足够强大,已经被用来编写 wiki,甚至(信不信由你)用于八位微处理器的可重定向汇编器。

为什么要使用 awk?

在一个幸运地在几个主要操作系统上默认安装了 Python 的世界中,awk 可能看起来已经过时,但它的长寿是当之无愧的。在许多方面,用 awk 编写的程序与其他语言的程序不同,因为 awk 是数据驱动的。也就是说,您向 awk 描述您要处理的数据,然后描述当找到此类数据时您希望它做什么。没有要创建的样板构造函数,没有要设计的复杂类结构,没有要创建的流对象。awk 是为特定目的而构建的,因此您可以理所当然地认为很多事情可以由 awk 处理。

awk 和 gawk 之间有什么区别?

Awk 是一个开源 POSIX 规范,因此任何人(理论上)都可以实现该命令和语言的版本。在 Linux 或任何提供 GNU awk 的系统上,调用 awk 的命令是 gawk,但它被符号链接到通用命令 awk。对于提供 nawkmawk 或任何其他 awk 实现变体的系统也是如此。大多数版本的 awk 都实现了 POSIX 规范定义的核心功能和文字函数,尽管它们可能会添加其他版本中没有的特殊新功能。因此,存在学习一种实现并开始依赖特殊功能的风险,但这个“问题”因大多数实现都是开源的而被缓和,因此它们通常可以根据需要安装。

学习 awk

有很多很棒的资源可以学习 awk。《GNU awk 手册》,GAWK: 有效的 awk 编程,是该语言的权威指南。您可以在 Opensource.com 上找到许多其他 awk 教程,包括“awk 入门,强大的文本解析工具”。

知识共享许可协议本作品根据知识共享署名-相同方式共享 4.0 国际许可协议获得许可。
© . All rights reserved.