唯一的真正 Awk
这是 The AWK Programming Language 第二版中描述的 awk 版本,
作者为 Al Aho、Brian Kernighan 和 Peter Weinberger
(Addison-Wesley,2024 年,ISBN-13 978-0138269722,ISBN-10 0138269726)。
有什么新功能?
此版本的 Awk 支持 UTF-8 和逗号分隔值(CSV)输入。
字符串
处理字符串的函数现在计算 Unicode 码点,而非字节;
这影响了 length、substr、index、match、split、
sub、gsub 以及其他函数。 请注意,码点
不一定是字符。
UTF-8 序列可以出现在字面字符串和正则表达式中。
可以使用 \u 后跟 1 到 8 个十六进制数字来包含任意字符。
正则表达式
正则表达式可以包含 UTF-8 码点,包括 \u。
CSV
选项 --csv 开启输入的 CSV 处理:
字段由逗号分隔,字段可以用
双引号(")字符引用,被引用的字段可以包含嵌入的换行符。
字段中的双引号必须加倍并置于被引用的字段内。
在 CSV 模式下,FS 被忽略。
如果未提供显式的分隔符参数,
split 中的字段分割由 CSV 模式决定。
版权
Copyright (C) Lucent Technologies 1997
All Rights Reserved
特此授予使用、复制、修改和分发本软件及其文档的权限, 可用于任何目的且无需支付费用,前提是上述版权声明 出现在所有副本中,并且版权声明和本许可声明及 免责声明均出现在支持性文档中,并且未经具体、 事先书面许可,不得使用 Lucent Technologies 或其任何 实体名称进行与软件分发相关的广告或宣传。
LUCENT 对本软件不承担任何保证, 包括所有隐含的适销性和特定用途适用性保证。 在任何情况下,LUCENT 或其任何实体均不对任何 特殊的、间接的或后果性的损害,或因使用、数据或 利润损失而导致的任何损害承担责任,无论是 基于合同、过失或其他侵权行为, 还是源于或涉及本软件的使用或性能。
分发与问题报告
更改,主要是错误修复和偶尔的功能增强,列于
FIXES。 如果您进一步分发此代码,请务必务必
随附 FIXES。
如果您发现错误,请报告给 当前维护者,ozan.yigit@gmail.com。 请 同时 在 GitHub 问题跟踪器中 创建一个 issue,以便于跟踪问题。 谢谢。
提交 Pull Request
欢迎提交 Pull Request。一些准则:
-
请勿使用非标准的功能或设施(例如,
strlcpy()、fpurge())。 -
请在提交拉取请求之前运行测试套件,并确保您的更改通过测试。具体操作如下:
- 将
awk的先前版本保存在您的路径中的某个位置。将其命名为nawk(例如)。 - 运行
oldawk=nawk make check > check.out 2>&1。 - 在结果中搜索
BAD或error。通常,请手动查看结果,以确保没有错误。
- 将
-
请创建拉取请求,请求合并到
staging分支,而不是合并到master分支。 这允许我们在合并后、合并到master之前进行测试,并进行任何额外的编辑或更改。
构建
该程序本身通过以下命令创建:
make
这将产生一系列大致如下所示的消息:
bison -d awkgram.y awkgram.y: warning: 44 shift/reduce conflicts [-Wconflicts-sr] awkgram.y: warning: 85 reduce/reduce conflicts [-Wconflicts-rr] awkgram.y: note: rerun with option '-Wcounterexamples' to generate conflict counterexamples gcc -g -Wall -pedantic -Wcast-qual -O2 -c -o awkgram.tab.o awkgram.tab.c gcc -g -Wall -pedantic -Wcast-qual -O2 -c -o b.o b.c gcc -g -Wall -pedantic -Wcast-qual -O2 -c -o main.o main.c gcc -g -Wall -pedantic -Wcast-qual -O2 -c -o parse.o parse.c gcc -g -Wall -pedantic -Wcast-qual -O2 maketab.c -o maketab ./maketab awkgram.tab.h >proctab.c gcc -g -Wall -pedantic -Wcast-qual -O2 -c -o proctab.o proctab.c gcc -g -Wall -pedantic -Wcast-qual -O2 -c -o tran.o tran.c gcc -g -Wall -pedantic -Wcast-qual -O2 -c -o lib.o lib.c gcc -g -Wall -pedantic -Wcast-qual -O2 -c -o run.o run.c gcc -g -Wall -pedantic -Wcast-qual -O2 -c -o lex.o lex.c gcc -g -Wall -pedantic -Wcast-qual -O2 awkgram.tab.o b.o main.o parse.o proctab.o tran.o lib.o run.o lex.o -lm
这会生成一个可执行文件 a.out;你最终需要
将其移动到类似 /usr/bin/awk 的位置。
如果你的系统没有 yacc 或 bison(GNU
等效工具),你需要先安装其中一个。
makefile 中的默认值是 bison;你将需要
编辑 makefile 以使用 yacc。
NOTE: 此版本使用 ISO/IEC C99,你也应该如此。 我们
使用 gcc -Wall 和/或各种系统上的本地 C
编译器,未做任何更改即成功编译,但新的系统或编译器
可能会提出一些新的抱怨;欢迎报告遇到的困难。
在 Macintosh OS X 上使用 gcc 和
标准开发工具,此代码无需更改即可编译。
如果你选择这样做,也可以使用 make CC=g++ 配合 GNU C++ 编译器
进行构建。
关于发布的说明
我们通常不进行发布。
关于维护的说明
NOTICE! 本程序的维护基于“尽力而为” 的原则。 我们试图尽快处理问题和拉取请求。 不幸的是, 维持本程序的运行并不在我们的优先事项列表的顶部。
最后更新
Mon 05 Feb 2024 08:46:55 IST