GNU awk
Awk是一种编程语言,用于在Unix下对文本和数据进行处理。数据可以来自标准输入、一个或多个文件,或其它命令的输出。它支持用户自定义 函数和动态正则表达式等先进功能,是Unix/Linux下的一个强大编程工具。它是用于处理文本的编程语言工具,也是 UNIX 操作系统的核心组件之一,任何 POSIX 兼容操作系统被认为都应该包含 AWK。其名字来自于三名原作者 Alfred Aho、Peter Weinberger 和 Brian Kernighan 姓的首字母缩写。AWK 提供了极其强大的功能:可以进行正则表达式的匹配、样式装入、流控制、数学运算符、进程控制语句,甚至于内置的变量和函数。它具备了一个完整的语言所应具有的几乎所有精美特性。实际上 AWK 的确拥有自己的语言:AWK 程序设计语言,三位创建者已将它正式定义为“样式扫描和处理语言”。它允许创建简短的程序,这些程序读取输入文件、为数据排序、处理数据、对输入执行计算以及生成报表,还有无数其他的功能。Gawk 是 Awk 的 GNU 版本。

它在命令行中使用,但更多是作为脚本来使用。awk的处理文本和数据的方式是这样的,它逐行扫描文件,从第一行到最后一行,寻找匹配的特定模式的行,并在这些行上进行你想要的操作。如果没有指定处理动作,则把匹配的行显示到标准输出(屏幕),如果没有指定模式,则所有被操作所指定的行都被处理。awk分别代表其作者姓氏的第一个字母。gawk是awk的GNU版本,它提供了Bell实验室和GNU的一些扩展。
80 岁的原作者为Awk 加入 Unicode 支持
布赖恩·W·克尼汉(Brian Kernighan) 在2022年8月接受采访时透露,他在几个月前为 AWK 添加了对 Unicode 的支持。不过由于他对 Git 不熟悉,所以尚未向 AWK 的代码仓库提交 commit。Brian Kernighan 在邮件中表示,几个月前,他在学习使用 Git,尝试通过提交 PR 来更好地理解 Git。在弄清楚这些之后,他正式提交 PR 为 AWK 添加对 Unicode 的支持。除了 AWK,相信 Kernighan 教授命名的「Unix」和发明的 "Hello, world" 语言演示更广为人知。
最新版本:4.0
1. 增加了新的参数
2. 所有长参数都有对应的短参数
3. "--sandbox" 参数不再调用 system() 来访问文件系统
4. 默认使用 POSIX 2008 "sub" 和 "gsub" 动作
5. 增强了对正则表达式的支持.
6. 其他方面的改进、bug修复和代码清理
最新版本:5.0
GNU Awk 5.0.0 发布了,Awk(Gawk)是一种编程语言,用于在 Linux/unix 下对文本和数据进行处理。数据可以来自标准输入、文件或其它命令的输出。它支持用户自定义函数和动态正则表达式等功能。这是一个重要的新版本,带来了一些新功能和功能改进,最大的亮点是实现了命名空间。相比 4.2.1,变化包括:
添加了对 POSIX 标准 %a 和 %A 输出格式的支持。
测试基础结构得到了极大的改进,简化了 test/Makefile.am 的内容,并且可以从 test/Makefile.in 生成 pc/Makefile.tst。
正则表达式例程已经被 GNULIB 中的例程取代。
基础设施升级:Bison 3.3、Automake 1.16.1、Gettext 0.19.8.1、makeinfo 6.5。
删除了未记录的配置选项和允许在标识符中使用非英语“字母”的代码。
删除了 `--with-whiny-user-strftime' 配置选项现在已经消失。
更好地适应 C99 环境。
PROCINFO["platform"] 产生一个字符串,表示编译 gawk 的平台。
写入不是变量名的 SYMTAB 元素现在会导致致命错误。
pretty-printer 中的注释处理几乎完全从头开始重新设计,以往无法支持的许多极端情况中的注释现在可以格式化中输出。
已经实现命名空间。命令行程序段现在必须都是自包含的句法单元,比如现在不能这么写:gawk -e 'BEGIN {' -e 'print "hello" }'
现在使用语言环境设置来忽略单字节语言环境中的大小写,而不是使用 Latin-1 中的硬连线法。
修复了一些 bug,包括特别重要的 bug。
项目主页:http://www.gnu.org/software/gawk/