Linix : AWK的三种变体介绍
awk 是一种用于操作和处理文本文件的强大语言。当文本文件中的行是记录格式时,它特别有用。即包含由分隔符分隔的多个字段的记录。即使输入文件不是记录格式,您仍然可以使用 awk 进行一些基本的文件和数据处理。即使没有需要处理的输入文件,您也可以使用 awk 编写编程逻辑。
简而言之,AWK 是一种功能强大的语言,可以在日常工作中派上用场。
如果您是 awk 新手,请先阅读此Awk 介绍教程,它是Awk 教程系列的一部分。
AWK 的学习曲线远小于任何其他语言的学习曲线。如果您已经了解 C 程序,您将体会到学习 AWK 是多么简单易行。
AWK 最初由三位开发人员编写——A. Aho、BW Kernighan 和 P. Weinberger。所以,AWK 这个名字来源于这三位开发者的首字母。
以下是 AWK 的三种变体:
1.awk
AWK 是由 A. Aho、BW Kernighan 和 P. Weinberger 编写的原创 AWK。
2. nawk
NAWK 代表“新 AWK”。这是 AT&T 的 Awk 版本。
3.gawk
GAWK 代表“GNU AWK”。所有 Linux 发行版都带有 GAWK。这与 AWK 和 NAWK 完全兼容。
在 Linux 上,键入 awk 或 gawk 会调用 GAWK。awk 链接到 gawk,如下所示在 Linux 系统上。
# ls -l /bin/awk /usr/bin/awk
lrwxrwxrwx 1 root root 4 Jan 5 23:13 /bin/awk -> gawk
lrwxrwxrwx 1 root root 14 Jan 5 23:13 /usr/bin/awk -> ../../bin/gawk
下表总结了这些版本中可用的不同功能。正如您在下面看到的,gawk 是包含原始 awk 和 nawk 的所有功能的超集。
awk VS Nawk VS Gawk
以下基本内置变量 FS、OFS、RS、ORS、NR、NF 和 FILENAME 在所有版本的 awk 中都可用。
特征 | 描述 | AWK | NAWK | GAWK |
---|---|---|---|---|
FS | 输入字段分隔符 | 是的 | 是的 | 是的 |
OFS | 输出字段分隔符 | 是的 | 是的 | 是的 |
RS | 记录分隔符 | 是的 | 是的 | 是的 |
ORS | 输出记录分隔符 | 是的 | 是的 | 是的 |
NR | 记录编号 | 是的 | 是的 | 是的 |
NF | 记录中的字段数 | 是的 | 是的 | 是的 |
FILENAME | 包含正在处理的当前输入文件 | 是的 | 是的 | 是的 |
以下所有功能在原始 awk 中均不可用。它们在 nawk 或 gawk 中可用,如下所示。
特征 | 描述 | NAWK | GAWK |
---|---|---|---|
FNR | 档案“记录编号” | 是的 | 是的 |
ARGC | 传递给 awk 脚本的总数或参数 | 是的 | 是的 |
ARGV | 包含所有 awk 脚本参数的数组 | 是的 | 是的 |
ARGIND | 索引 ARGV 以检索当前文件名 | 是的 | |
SUBSEP | 数组索引的下标分隔符 | 是的 | 是的 |
RSTART | 匹配函数将 RSTART 设置为 str1 在 str2 中的起始位置 | 是的 | 是的 |
RLENGTH | 匹配函数将 RLENGTH 设置为 str1 的长度 | 是的 | 是的 |
OFMT | awk 使用它来决定如何打印值。默认为“%.6g” | 是的 | 是的 |
ENVIRON | 包含所有环境变量和值的数组 | 是的 | |
IGNORECASE | 默认值为 0。当设置为 1 时,字符串和正则表达式比较不区分大小写。 | 是的 | |
ERRNO | 包含 I/O 操作的错误消息。例如,在使用 getline 函数时。 | 是的 | |
BINMODE n | 设置 I/O 的二进制模式。n 可以是 1(输入文件)、2(输出文件)或 3(所有文件) | 是的 | |
CONVFMT | 将数字转换为字符串时使用的格式。 | 是的 | |
FIELDWIDTHS n | n 是一个以空格分隔的数字,表示列宽。如果可用,gawk 将使用它而不是 FS。 | 是的 | |
LINT n | n 可以是一个数字。当 n 为非零数(表示为真)时,gawk 将显示致命、无效或警告 lint 消息(与 –lint 命令行相同) | 是的 | |
TEXTDOMAIN | 这用于国际化。 | 是的 | |
sub(str1,str2,var) | 在输入字符串 (var) 中,str1 被替换为 str2,输出被存储回 var | 是的 | 是的 |
gsub (str1, str2, var) | 与 sub 相同,但全局。它对同一个输入字符串 (var) 进行多次替换。 | 是的 | 是的 |
match(str1,str2) | 当 str1 存在于 str2 中时返回正数。 | 是的 | 是的 |
getline < file | 从另一个输入文件中读取下一行。套装 $0, NF | 是的 | 是的 |
getline var < file | 从另一个输入文件中读取下一行并将其存储在变量(var)中 | 是的 | 是的 |
toupper(str) | 将 str 转换为大写 | 是的 | |
tolower(str) | 将 str 转换为小写 | 是的 | |
|& | awk 命令与外部进程之间的两种通信方式 | 是的 | |
systime() | 纪元时间中的当前时间。与 strftime 结合使用。例如打印 strftime(“%c”,systime()) | 是的 |
- 点赞
- 收藏
- 关注作者
评论(0)