英语法语西班牙语

Ad


OnWorks 网站图标

gawk - 云端在线

通过 Ubuntu Online、Fedora Online、Windows 在线模拟器或 MAC OS 在线模拟器在 OnWorks 免费托管服务提供商中运行 gawk

这是可以使用我们的多个免费在线工作站之一在 OnWorks 免费托管服务提供商中运行的命令 gawk,例如 Ubuntu Online、Fedora Online、Windows 在线模拟器或 MAC OS 在线模拟器

程序:

您的姓名


gawk - 模式扫描和处理语言

概要


呆子 [POSIX 或 GNU 样式选项] -f 程序文件 [ -- ] 文件 ...
呆子 [POSIX 或 GNU 样式选项] [ -- ] 程序文本 文件 ...

商品描述


GAWK 是 GNU 项目对 AWK 编程语言的实现。 它符合
POSIX 1003.1 标准中语言的定义。 这个版本依次是
根据中的描述 AWK 代码编程 语言,由 Aho、Kernighan 和
温伯格。 GAWK 提供当前版本的 Brian 中的附加功能
克尼汉的 AWK 以及一些 GNU 特定的扩展。

命令行由选项组成 呆子 本身,AWK 程序文本(如果未提供)
通过 -f or - 文件 选项),以及要在 农业研究中心无人驾驶汽车
定义的 AWK 变量。

什么时候 呆子 被调用 - 轮廓 选项,它开始收集分析统计信息
从程序的执行来看。 GAWK 在此模式下运行更慢,并自动
在文件中生成执行配置文件 awkprof.out 完成后。 见 - 轮廓
选项,如下。

GAWK 还有一个集成的调试器。 可以通过以下方式启动交互式调试会话
提供 -调试 命令行选项。 在这种执行模式下, 呆子 负载
AWK 源代码,然后提示调试命令。 GAWK 只能调试AWK
程序源提供 -f 选项。 调试器记录在 GAWK: 有效
AWK 代码编程.

OPTION FORMAT


GAWK 选项可以是传统的 POSIX 风格的单字母选项,也可以是 GNU 风格的长
选项。 POSIX 选项以单个“-”开头,而长选项以“--”开头。 长
为 GNU 特定功能和 POSIX 强制功能提供了选项。

GAWK-特定选项通常以长选项形式使用。 长选项的论据
要么通过选项与选项连接 = 标志,中间没有空格,或者它们可能是
在下一个命令行参数中提供。 长选项可以缩写,只要
缩写仍然是唯一的。

此外,每个多头期权都有一个相应的空头期权,因此该期权的
可以从内部使用功能 #! 可执行脚本。

配置


GAWK 接受以下选项。 首先列出标准选项,然后是
的选项 呆子 扩展名,按短选项的字母顺序列出。

-f 程序文件
- 文件 程序文件
从文件中读取AWK程序源码 程序文件, 而不是从第一个
命令行参数。 多种的 -f (或 - 文件) 选项。

-F fs
--字段分隔符 fs
使用 fs 对于输入字段分隔符( FS 预定义变量)。

-v VAR=VAL
- 分配 VAR=VAL
赋值 VAL 到变量 VAR, 在程序开始执行之前。
此类变量值可供 开始 AWK 程序的规则。

-b
--字符作为字节
将所有输入数据视为单字节字符。 换句话说,不要支付任何费用
尝试将字符串作为多字节处理时注意区域设置信息
字符。 的 --posix 选项覆盖此选项。

-c
- 传统的
跑进 兼容性 模式。 在兼容模式下, 呆子 行为相同
布赖恩·克尼汉 (Brian Kernighan) AWK; 没有一个特定于 GNU 的扩展被识别。 看 GNU
EXTENSIONS,下面,了解更多信息。

-C
- 版权
在标准上打印 GNU 版权信息消息的简短版本
输出并成功退出。

-d[文件]
--转储变量[=文件]
将全局变量、它们的类型和最终值的排序列表打印到 文件。 如果
没有 文件 提供, 呆子 使用名为的文件 awkvars.out 在当前目录中。
拥有所有全局变量的列表是查找排版的好方法
程序中的错误。 如果你有一个大的,你也可以使用这个选项
具有很多功能的程序,并且您希望确保您的功能不会
不经意间使用了你认为是本地的全局变量。 (这是一个
使用简单的变量名特别容易犯的错误,例如 i, j, 等等。)

-D[文件]
-调试[=文件]
启用 AWK 程序的调试。 默认情况下,调试器读取命令
从键盘交互(标准输入)。 可选的 文件 论点
指定一个带有命令列表的文件,供调试器执行非
交互地。

-e 程序文本
- 来源 程序文本
使用 程序文本 作为AWK程序源代码。 此选项允许轻松
库函数的混合(通过 -f- 文件 选项)与来源
在命令行输入的代码。 它主要用于中型到大型 AWK
shell 脚本中使用的程序。

-E 文件
--执行 文件
-f,然而,这是最后一个处理的选项。 这应该是
与使用 #! 脚本,特别是对于 CGI 应用程序,以避免传入
来自 URL 的命令行上的选项或源代码 (!)。 此选项禁用
命令行变量赋值。

-g
--gen-pot
扫描解析AWK程序,生成GNU 。锅 (便携式对象模板)
标准输出上的格式文件,其中包含所有可本地化字符串的条目
程序。 不执行程序本身。 见 GNU gettext的 分布于
更多信息 。锅 文件。

-h
- 帮帮我 在标准输出上打印一个相对简短的可用选项摘要。
(根据 GNU 编码 RSPO标准,这些选项会导致立即成功退出。)

-i 包含文件
- 包括 包含文件
加载 awk 源库。 这将使用 路径
环境变量。 如果初始搜索失败,将再次尝试
添加后 .awk 后缀。 该文件将只加载一次(即
消除重复),代码不构成主程序
资源。

-l LIB
- 加载 LIB
加载共享库 LIB. 这将使用 awklibpath
环境变量。 如果初始搜索失败,将再次尝试
在为平台附加默认共享库后缀之后。 图书馆
初始化例程应命名为 dl_load().

-L [折扣值]
- 皮棉[=折扣值]
提供有关可疑或不可移植到其他 AWK 的构造的警告
实现。 带有可选参数 致命, lint 警告变得致命
错误。 这可能是激烈的,但它的使用肯定会鼓励发展
更清洁的 AWK 程序。 带有可选参数 无效, 只警告
发出实际上无效的东西。 (这还没有完全实现。)

-M
--bignum
强制对数字进行任意精度算术。 此选项在以下情况下无效 呆子
未编译为使用 GNU MPFR 和 MP 库。

-n
--非十进制数据
识别输入数据中的八进制和十六进制值。 使用 Free Introduction 选项
警告!

-N
--use-lc-数字
这迫使 呆子 解析输入时使用语言环境的小数点字符
数据。 尽管 POSIX 标准要求这种行为,并且 呆子 这样做的时候
--posix 实际上,默认是遵循传统行为并使用
句点作为小数点,即使在句点不是小数点的语言环境中
点字符。 此选项覆盖默认行为,没有完整的
严厉的 --posix 选项。

-o[文件]
--漂亮的印刷品[=文件]
将程序的漂亮打印版本输出到 文件。 如果不 文件 提供,
呆子 使用名为的文件 awkprof.out 在当前目录中。

-O
--优化
对程序的内部表示启用优化。 目前,
这包括简单的常量折叠和递归的尾调用消除
职能。 这 呆子 维护者希望随着时间的推移添加额外的优化。

-p[简介文件]
- 轮廓[=简介文件]
启动分析会话,并将分析数据发送到 简介文件。 默认值
is awkprof.out. 配置文件包含每个语句的执行计数
程序在左边距和每个用户定义函数的函数调用计数。

-P
--posix
这开启 兼容性 模式,具有以下附加限制:

· \x 无法识别转义序列。

· 只有空格和制表符作为字段分隔符 FS 设置为单个空格,
换行符没有。

· 之后不能继续行 ?:.

· 同义词 FUNC 对于关键字 功能 不被认可。

· 运营商 ****= 不能代替 ^^=.

-r
--重新间隔
启用使用 间隔 表达式 在正则表达式匹配中(见 原价
表达式, 以下)。 区间表达式在传统上不可用
AWK 语言。 POSIX 标准添加了它们,以使 AWK埃格雷普 一致
彼此。 默认情况下启用它们,但此选项仍可用于
- 传统的.

-S
--沙盒
运行 呆子 在沙箱模式下,禁用 系统() 函数,输入重定向
函数getline, 输出重定向 打印的printf, 并加载动态扩展。
命令执行(通过管道)也被禁用。 这有效地阻止了
访问本地资源的脚本(除了在
命令行)。

-t
--lint-旧
提供有关无法移植到原始版本的构造的警告
UNIX AWK.

-V
- 版
打印此特定副本的版本信息 呆子 在标准输出上。
这主要用于了解当前的副本是否 呆子 在你的系统上
迄今为止,关于自由软件基金会正在分发的任何内容。
这在报告错误时也很有用。 (根据 GNU 编码 RSPO标准这些
选项导致立即成功退出。)

-- 表示选项结束。 这对于允许进一步的 AWK 参数很有用
程序本身以“-”开头。 这提供了与论点的一致性
大多数其他 POSIX 程序使用的解析约定。

在兼容模式下,任何其他选项都被标记为无效,否则
忽略。 在正常操作中,只要提供了程序文本,未知选项
传递给 AWK 程序 无人驾驶汽车 数组进行处理。 这是特别
对于通过“#!”运行 AWK 程序很有用可执行解释器机制。

对于 POSIX 兼容性, -W 可以使用选项,后跟长选项的名称。

AWK 课程 执行


AWK 程序由一系列模式动作语句和可选函数组成
定义。

@包括 "文件名"
@加载 "文件名"
模式 { 行动 声明 }
功能 姓名(参数 名单) { 声明 }

GAWK 首先从程序中读取程序源 程序文件(s) 如果指定,来自参数
- 来源,或来自命令行上的第一个非选项参数。 这 -f
- 来源 选项可以在命令行上多次使用。 GAWK 读取程序
文字仿佛所有 程序文件s 和命令行源文本已连接
一起。 这对于构建 AWK 函数库很有用,而无需
将它们包含在使用它们的每个新 AWK 程序中。 它还提供了混合的能力
带有命令行程序的库函数。

此外,以开头的行 @包括 可用于将其他源文件包含到
您的程序,使库的使用更加容易。 这相当于使用 -i 选项。

以开头的行 @加载 可用于将共享库加载到您的程序中。 这
相当于使用 -l 选项。

环境变量 路径 指定查找源文件时要使用的搜索路径
-f-i 选项。 如果此变量不存在,则默认路径为
“.:/usr/local/share/awk”. (实际目录可能会有所不同,具体取决于如何 呆子
构建并安装。)如果给定的文件名 -f 选项包含“/”字符,没有
执行路径搜索。

环境变量 awklibpath 指定查找源时要使用的搜索路径
-l 选项。 如果此变量不存在,则默认路径为
“/usr/local/lib/gawk”. (实际目录可能会有所不同,具体取决于如何 呆子 被建
并安装。)

GAWK 按以下顺序执行 AWK 程序。 一、所有变量赋值
通过指定 -v 选项被执行。 下一个, 呆子 将程序编译成
内部形式。 然后, 呆子 执行中的代码 开始 规则(如果有),然后
继续读取名称中的每个文件 无人驾驶汽车 数组(最多 ARGV[ARGC])。 如果没有
在命令行上命名的文件, 呆子 读取标准输入。

如果命令行上的文件名具有以下形式 VAR=VAL 它被视为一个变量
任务。 变量 VAR 将被赋值 VAL. (这发生在任何
开始 规则已运行。)命令行变量分配对于以下情况最有用
将值动态分配给 AWK 用来控制输入如何分解的变量
字段和记录。 如果需要多次传递,它也可用于控制状态
在单个数据文件上。

如果特定元素的值 无人驾驶汽车 是空的 (""), 呆子 跳过它。

对于每个输入文件,如果 开始文件 规则存在, 呆子 之前执行相关代码
处理文件的内容。 相似地, 呆子 执行与关联的代码
结束文件 处理文件后。

对于输入中的每条记录, 呆子 测试是否匹配 模式 在 AWK
程序。 对于记录匹配的每个模式, 呆子 执行相关的 行动.
这些模式按照它们在程序中出现的顺序进行测试。

最后,在所有输入都用完后, 呆子 执行中的代码 结束 规则(如果
任何)。

命令 Line 目录
根据 POSIX,文件名在 AWK 命令行必须是文本文件。 行为
如果不是,则为“未定义”。 大多数版本的 AWK 处理命令上的目录
行作为致命错误。

从 4.0 版开始 呆子, 命令行上的目录产生警告,但
否则跳过。 如果其中任何一个 --posix or - 传统的 给出了选项,然后
呆子 恢复将命令行上的目录视为致命错误。

变量, 记录 AND FIELDS


AWK 变量是动态的; 它们在第一次使用时就出现了。 他们的
值要么是浮点数要么是字符串,或者两者都是,这取决于它们的方式
用过的。 AWK 也有一维数组; 多维数组可能是
模拟的。 GAWK 提供真正的数组数组; 看 阵列, 以下。 几个预定义
变量在程序运行时设置; 这些将根据需要进行描述并总结如下。

记录
通常,记录由换行符分隔。 您可以控制记录的方式
通过为内置变量赋值来分隔 RS。 如果 RS 是任何单个字符,
该字符分隔记录。 否则, RS 是一个正则表达式。 中的文字
与此正则表达式匹配的输入分隔记录。 然而,在
兼容模式,仅使用其字符串值的第一个字符来分隔
记录。 如果 RS 设置为空字符串,然后记录由空行分隔。
什么时候 RS 设置为空字符串,换行符始终充当字段分隔符,
除了任何价值 FS 可能有。

字段
在读取每条输入记录时, 呆子 将记录拆分为 领域, 使用值
FS 变量作为字段分隔符。 如果 FS 是单个字符,字段由
那个性格。 如果 FS 是空字符串,那么每个单独的字符变成一个
单独的字段。 否则, FS 预计是一个完整的正则表达式。 在里面
特殊情况 FS 是单个空格,字段由空格和/或制表符分隔
和/或换行符。 (但请参阅第 POSIX 兼容性,如下)。 注意: 的价值
忽略案例 (见下文)也会影响字段的分割方式 FS 是一个正则表达式,
以及记录在何时分开 RS 是一个正则表达式。

如果 场宽 变量设置为空格分隔的数字列表,每个字段都是
预计具有固定宽度,并且 呆子 使用指定的宽度拆分记录。
价值 FS 被忽略。 分配一个新值 FS or 平面图 覆盖使用
场宽.

同样,如果 平面图 变量被设置为一个表示正则表达式的字符串,每个
字段由与该正则表达式匹配的文本组成。 在这种情况下,常规
表达式描述字段本身,而不是分隔字段的文本。
分配一个新值 FS or 场宽 覆盖使用 平面图.

输入记录中的每个字段都可以通过其位置引用: $1, $2,等等。 $0
是整个记录。 字段不需要被常量引用:

n = 5
打印 $n

打印输入记录中的第五个字段。

变量 NF 设置为输入记录中的字段总数。

对不存在的字段的引用(即,后面的字段 $NF) 产生空字符串。
但是,分配给不存在的字段(例如, $(NF+2) = 5) 增加了 NF,
创建任何以空字符串作为其值的中间字段,并导致该值
of $0 重新计算,字段由值分隔 飞行服务队。 参考文献
到负编号字段会导致致命错误。 递减 NF 导致值
超过要丢失的新值的字段,以及 $0 重新计算,与
由值分隔的字段 飞行服务队.

将值分配给现有字段会导致整个记录在以下情况下重建 $0 is
参考。 类似地,赋值给 $0 导致记录被重新拆分,创建
字段的新值。

内建的 变量
GAWK的内置变量是:

农业研究中心 命令行参数的数量(不包括选项 呆子,或
程序源)。

阿尔金 指数在 无人驾驶汽车 当前正在处理的文件。

无人驾驶汽车 命令行参数数组。 该数组的索引从 0 到 农业研究中心 - 1。
动态改变内容 无人驾驶汽车 可以控制用于数据的文件。

二进制模式 在非 POSIX 系统上,指定对所有文件 I/O 使用“二进制”模式。
数值 1、2 或 3,指定输入文件、输出文件或所有
文件,分别应使用二进制 I/O。 的字符串值 “ r”“w”
分别指定输入文件或输出文件应使用二进制
输入/输出。 的字符串值 “rw” or “你” 指定所有文件都应该使用二进制
输入/输出。 任何其他字符串值都被视为 “rw”,但会产生警告
信息。

转换 数字的转换格式, “%.6g”, 默认情况下。

环保 包含当前环境值的数组。 该数组是
由环境变量索引,每个元素都是该变量的值
变量(例如, 环境[“家”] 可能是 “/家/阿诺德”)。 更改此数组
不影响程序看到的环境 呆子 通过
重定向或 系统() 功能。

错误号 如果发生系统错误,要么执行重定向 函数getline, 在阅读过程中
函数getline,或在 关(), 然后 错误号 将包含一个字符串描述
错误。 该值需要在非英语语言环境中进行翻译。

场宽 以空格分隔的字段宽度列表。 设置时, 呆子 解析输入
进入固定宽度的字段,而不是使用 FS 变量为
字段分隔符。 看 字段, 以上。

文件名 当前输入文件的名称。 如果命令中没有指定文件
线,值 文件名 是 ”-”。 然而, 文件名 在里面是未定义的
开始 规则(除非由 函数getline).

FNR 当前输入文件中的输入记录号。

平面图 描述记录中字段内容的正则表达式。 什么时候
组, 呆子 将输入解析为字段,其中字段与常规字段匹配
表达式,而不是使用值 FS 变量作为字段
分隔器。 看 字段, 以上。

FS 输入字段分隔符,默认为空格。 看 字段, 以上。

功能表 一个数组,其索引和对应的值是所有用户的名称-
程序中定义或扩展的函数。 注意: 你不能使用
删除 声明与 功能表 数组。

忽略案例 控制所有正则表达式和字符串操作的区分大小写。
If 忽略案例 有一个非零值,然后是字符串比较和模式
规则匹配,字段分割 FS平面图, 记录与
RS, 正则表达式匹配 ~!~,并 gensub(), gsub(),
指数(), 比赛(), 帕斯普利特(), 分裂()子() 内置函数全部忽略
进行正则表达式操作时的情况。 注意: 数组下标是
不能 做作的。 但是,那 分类()分类() 功能受到影响。
因此,如果 忽略案例 不等于零, /aB/ 匹配所有字符串
“ab”, “aB”, “阿布”“AB”. 与所有 AWK 变量一样,初始值
忽略案例 为零,所以所有的正则表达式和字符串操作都是
通常区分大小写。

皮棉 提供动态控制 - 皮棉 AWK 程序中的选项。
为真时, 呆子 打印 lint 警告。 如果为假,则不会。 分配时
字符串值 “致命的”, lint 警告变成致命错误,就像
--lint=致命. 任何其他真值只会打印警告。

NF 当前输入记录中的字段数。

NR 到目前为止看到的输入记录总数。

正交频域调制 数字的输出格式, “%.6g”, 默认情况下。

飞行服务队 输出字段分隔符,默认为空格。

ORS 输出记录分隔符,默认为换行符。

预审 任意精度浮点数的工作精度,53 by
默认。

信息 此数组的元素提供对有关正在运行的 AWK 的信息的访问
程序。 在某些系统上,数组中可能有元素, “组1”
通过 “团体n" 对于一些 n,这是补充组的数量
过程有。 使用 in 运算符来测试这些元素。 这
保证以下元素可用:

PROCINFO["egid"] 的值 搞定(2)系统调用。

PROCINFO["strftime"]
默认时间格式字符串 时间().

PROCINFO["euid"] 的值 盖特伊德(2)系统调用。

PROCINFO[“FS”] “FS” 如果字段拆分 FS 实际上, “FPAT” if
场分裂与 平面图 有效,或 “田野”
如果字段拆分 场宽 有效。

PROCINFO["标识符"]
一个子数组,由所有使用的标识符的名称索引
在 AWK 程序的文本中。 这些值表示什么
呆子 完成后知道标识符
解析程序; 他们是 不能 更新的同时
程序运行。 对于每个标识符,
元素是以下之一:

“大批”
标识符是一个数组。

“内置”
标识符是一个内置函数。

“延期”
标识符是通过加载的扩展函数
@加载 or -l.

“标量”
标识符是一个标量。

“无类型”
标识符是无类型的(可以用作
标量或数组, 呆子 还不知道)。

“用户” 标识符是用户定义的函数。

PROCINFO["gid"] 的值 获取信息(2)系统调用。

PROCINFO["pgrpid"] 当前进程的进程组 ID。

PROCINFO["pid"] 当前进程的进程ID。

PROCINFO["ppid"] 当前进程的父进程 ID。

PROCINFO[“uid”] 的值 获取用户名(2)系统调用。

PROCINFO["sorted_in"]
如果这个元素存在于 信息,那么它的值
控制遍历数组元素的顺序
in 循环。 支持的值为 “@ind_str_asc”,
“@ind_num_asc”, “@val_type_asc”, “@val_str_asc”,
“@val_num_asc”, “@ind_str_desc”, “@ind_num_desc”,
“@val_type_desc”, “@val_str_desc”, “@val_num_desc”
“@unsorted”. 该值也可以是任何名称
比较函数定义如下:

功能 cmp_func(i1, v1, i2, v2)

哪里 i1i2 是指数,并且 v1v2
被比较的两个元素的对应值。
它应该返回一个小于、等于或大于的数字
大于 0,取决于数组元素的排列方式
被订购。

PROCINFO["输入", “READ_TIMEOUT”]
读取数据的超时时间(以毫秒为单位) 输入,
哪里 输入 是重定向字符串或文件名。 一个值
零或小于零意味着没有超时。

PROCINFO["mpfr_version"]
GNU MPFR 库的版本用于任意
精确数字支持 呆子. 这个条目不是
如果 MPFR 支持没有编译成 呆子.

PROCINFO["gmp_version"]
GNU MP 库的版本用于任意
精确数字支持 呆子. 这个条目不是
如果 MPFR 支持没有编译成 呆子.

PROCINFO["prec_max"]
GNU MPFR 库支持的最大精度
用于任意精度的浮点数。 这
如果 MPFR 支持没有被编译成
呆子.

PROCINFO["prec_min"]
GNU MPFR 库允许的最小精度
任意精度浮点数。 这个条目是
如果 MPFR 支持没有被编译成 呆子.

PROCINFO["api_major"]
扩展 API 的主要版本。 这个条目不是
如果加载动态扩展不可用,则存在。

PROCINFO["api_minor"]
扩展 API 的次要版本。 这个条目不是
如果加载动态扩展不可用,则存在。

PROCINFO[“版本”] 的版本 呆子.

回合模式 用于对数字进行任意精度算术的舍入模式,通过
默认 “N” (IEEE-754 roundTiesToEven 模式)。 接受的值为 “N” or
“n” 对于roundTiesToEven, “ U” or “你” 对于roundTowardPositive, “D” or “ d”
圆形向负, “Z” or “z” 对于 roundTowardZero,如果您的版本
GNU MPFR 库支持它, “一个” or “一种” 为roundTiesToAway。

RS 输入记录分隔符,默认为换行符。

RT 记录终结者。 GAWKRT 到匹配的输入文本
由指定的字符或正则表达式 RS.

启动 匹配的第一个字符的索引 比赛(); 如果不匹配,则为 0。 (这
意味着字符索引从 XNUMX 开始。)

长度 匹配的字符串长度 比赛(); -1 如果没有匹配。

分会 用于分隔数组元素中多个下标的字符,通过
默认 “\034”.

符号表 一个数组,其索引是所有当前定义的全局变量的名称
和程序中的数组。 该数组可用于间接访问读取
或写入变量的值:

FOO = 5
符号表["foo"] = 4
打印 FOO # 打印 4

数组() 函数可用于测试元素是否在 符号表 是一个
大批。 您不得使用 删除 声明与 符号表 数组。

文本域 AWK程序的文本域; 用于查找本地化翻译
对于程序的字符串。

阵列
数组用方括号 ([])。 如果
表达式是一个表达式列表(表达式, 表达式 ...) 那么数组下标是一个字符串
由每个表达式的(字符串)值的串联组成,由
的价值 分会 多变的。 该工具用于模拟多维
数组。 例如:

i = “一个”; j = “乙”; k = “C”
x[我, j, k] = “你好, 世界\n"

分配字符串 “你好, 世界\n" 到数组的元素 x
绳子 "A\034B\034C". AWK 中的所有数组都是关联的,即由字符串值索引。

特殊运算符 in 可用于测试数组是否具有由以下组成的索引
特殊值:

if (瓦尔 in 大批)
打印 数组[val]

如果数组有多个下标,使用 (而且, j) in 排列.

in 构造也可以用于 循环遍历所有元素
大批。 但是,那 (而且, j) in 排列 构造仅适用于测试,不适用于 循环。

可以使用以下命令从数组中删除元素 删除 陈述。 这 删除 声明
也可用于删除数组的全部内容,只需指定数组即可
没有下标的名字。

呆子 支持真正的多维数组。 它不要求这样的数组是
``矩形'' 如在 C 或 C++ 中。 例如:

[1] = 5
[2][1] = 6
[2][2] = 7

注意: 你可能需要告诉 呆子 一个数组元素实际上是一个子数组,以便使用
它在哪里 呆子 需要一个数组(例如在第二个参数中 分裂())。 你可以做
这是通过在子数组中创建一个元素,然后用 删除
语句。

变量 打字 转化
变量和字段可以是(浮点)数字或字符串,或两者兼而有之。 价值如何
变量的解释取决于其上下文。 如果在数值表达式中使用,
它将被视为一个数字; 如果用作字符串,它将被视为字符串。

要强制将变量视为数字,请向其添加 0; 迫使它被视为
字符串,将其与空字符串连接。

未初始化的变量具有数值 0 和字符串值 ""(空值,或
空,字符串)。

当字符串必须转换为数字时,转换是使用
斯特德(3). 使用以下值将数字转换为字符串 转换 作为一种格式
字符串为 冲刺(3)、以变量的数值为参数。 然而,
即使 AWK 中的所有数字都是浮点数,整数值也是 时刻 转换为
整数。 因此,给定

转换 = “%2.2f”
a = 12
b = a ""

变量 b 有一个字符串值 “12” 并不是 “12.00”.

注意:在 POSIX 模式下操作时(例如使用 --posix 选项),请注意语言环境
设置可能会干扰十进制数的处理方式:小数点分隔符
你喂给的数字 呆子 必须符合您的语言环境所期望的,无论是
逗号 (,) 或句点 (.)。

GAWK 执行如下比较:如果两个变量是数字,则比较它们
数字上。 如果一个值是数字,而另一个值是“数字
字符串,”然后比较也以数字方式进行。 否则,数值为
转换为字符串并执行字符串比较。 比较两个字符串,
当然,作为字符串。

注意字符串常量,例如 “57”,都是 不能 数字字符串,它们是字符串
常数。 “数字字符串”的思想只适用于字段, 函数getline 输入, 文件名,
无人驾驶汽车 元素, 环保 元素和由创建的数组的元素 分裂() or
帕斯普利特() 那是数字字符串。 基本思想是 用户 输入,并且只有用户
输入,看起来是数字,应该这样对待。

八进制 十六进制 常量
您可以在 AWK 程序源代码中使用 C 风格的八进制和十六进制常量。 为了
例如,八进制值 011 等于十进制 9, 和十六进制值 0x11 is
等于十进制 17。

常量
AWK 中的字符串常量是用双引号括起来的字符序列(如
“值”)。 在字符串中,某些 逃生 序列 被识别,如在 C 中。这些是:

\\ 字面反斜杠。

\a “警报”字符; 通常是 ASCII BEL 字符。

\b 退格。

\f 换页。

\n 新队。

\r 回车。

\t 水平选项卡。

\v 垂直选项卡。

\x十六进制 数字
由后面的十六进制数字串表示的字符 \x。 如
在 ISO C 中,以下所有十六进制数字都被视为转义的一部分
顺序。 (这个特性应该告诉我们一些关于语言设计的信息
委员会。)例如, "\x1B" 是 ASCII ESC(转义)字符。

\DDD 由 1 位、2 位或 3 位八进制数字序列表示的字符。 例如,
“\033” 是 ASCII ESC(转义)字符。

\c 字面意思 c.

转义序列也可以在常量正则表达式中使用(例如,
/[ \t\f\n\r\v]/ 匹配空白字符)。

兼容模式下,八进制和十六进制表示的字符转义
序列在正则表达式常量中使用时按字面处理。 因此, /a\52b/
相当于 /a\*b/.

模式 AND 行动


AWK 是一种面向行的语言。 先有模式,后有动作。 行动
声明包含在 {}. 可能缺少模式,或者操作可能
失踪,但当然,不能两者兼而有之。 如果模式丢失,则执行操作
对于每一个输入记录。 一个缺失的动作相当于

{ 打印 }

打印整个记录。

评论以 # 字符,并继续直到行尾。 空行
可用于分隔语句。 通常,语句以换行符结束,但是,
对于以逗号结尾的行,情况并非如此, {, ?, :, &&||. 行结束于 do
or 其他 也让他们的陈述自动在下一行继续。 在
其他情况下,可以通过以“\”结尾来继续一行,在这种情况下,换行符是
忽略了。

多个语句可以放在一行中,用“;”分隔它们。 这适用于
模式-动作对(通常情况)的动作部分中的两个语句,以及
到模式动作语句本身。

模式
AWK 模式可能是以下之一:

开始
结束
开始文件
结束文件
/定期 表达/
相关的 表达
模式 && 模式
模式 || 模式
模式 ? 模式 : 模式
(模式)
! 模式
pattern1, pattern2

开始结束 是两种特殊的模式,它们不针对输入进行测试。
所有的动作部分 开始 模式被合并,就好像所有的语句都被合并了一样
写在一个 开始 规则。 它们在读取任何输入之前执行。
同样,所有的 结束 规则被合并,并在所有输入用尽时执行(或
当一个 出口 语句被执行)。 开始结束 图案不能与其他组合
模式表达式中的模式。 开始结束 模式不能缺少动作部分。

开始文件结束文件 是额外的特殊模式,其主体在之前执行
读取每个命令行输入文件的第一条记录和读取最后一条记录后
每个文件。 在 - 的里面 开始文件 规则,值 错误号 将是空字符串,如果
文件已成功打开。 否则,文件和文件有问题
代码应该使用 下一个文件 跳过它。 如果不这样做, 呆子 产生它通常的致命
无法打开文件的错误。

针对 /定期 表达/ 模式,为每个输入执行关联的语句
匹配正则表达式的记录。 正则表达式与中的相同
埃格雷普(1),总结如下。

A 相关的 表达 可以使用以下部分中定义的任何运算符
行动。 这些通常测试某些字段是否与某些正则表达式匹配。

&&, ||! 运算符分别是逻辑与、逻辑或和逻辑非,
如在 C 中。它们进行短路评估,也与 C 中一样,用于组合更多
原始模式表达式。 与大多数语言一样,括号可用于更改
评价顺序。

?: 运算符就像 C 中的相同运算符。如果第一个模式为真,则
用于测试的模式为第二个模式,否则为第三个模式。 只有其中之一
评估第二个和第三个模式。

pattern1, pattern2 表达式的形式称为 范围 模式. 它匹配所有
以匹配的记录开头的输入记录 pattern1,并继续直到记录
匹配 pattern2, 包括的。 它不与任何其他类型的模式结合
表达。

原价 表达式
正则表达式是在 埃格雷普. 它们由字符组成
如下:

c 匹配非元字符 c.

\c 匹配文字字符 c.

. 匹配任何字符 如: 新队。

^ 匹配字符串的开头。

$ 匹配字符串的结尾。

[美国广播公司...] 字符列表:匹配任何字符 美国广播公司.... 你可以包括一个
用破折号分隔字符范围。

[^美国广播公司...] 否定字符列表:匹配除 美国广播公司....

r1|r2 替代:匹配任一 r1 or r2.

r1r2 串联:匹配 r1, 接着 r2.

r+ 匹配一个或多个 r的。

r* 匹配零个或多个 r的。

r? 匹配零或一 r的。

(r) 分组:匹配 r.

r{n}
r{n,}
r{n,m} 大括号内的一两个数字表示 间隔 表达。 如果有
大括号中的一个数字,前面的正则表达式 r 重复 n
次。 如果有两个数字用逗号隔开, r 重复 nm
次。 如果有一个数字后跟一个逗号,那么 r 至少重复
n 倍。

\y 匹配单词开头或结尾的空字符串。

\B 匹配单词中的空字符串。

\< 匹配单词开头的空字符串。

\> 匹配单词末尾的空字符串。

\s 匹配任何空白字符。

\S 匹配任何非空白字符。

\w 匹配任何由单词组成的字符(字母、数字或下划线)。

\W 匹配任何非单词组成的字符。

\` 匹配缓冲区开头的空字符串(字符串)。

\' 匹配缓冲区末尾的空字符串。

在字符串常量中有效的转义序列(请参阅 常量)也
在正则表达式中有效。

字符 是 POSIX 标准中引入的一个特性。 字符类是一个
用于描述具有特定属性的字符列表的特殊符号,但
实际字符本身可能因国家/地区和/或不同国家/地区而异
字符集到字符集。 例如,什么是字母表的概念
美国和法国的性格不同。

字符类只在正则表达式中有效 字符的括号
列表。 字符类包括 [:,表示类的关键字,以及 :]。 该
POSIX 标准定义的字符类是:

[:铝:] 字母数字字符。

[:α:] 字母字符。

[:空白的:] 空格或制表符。

[:控制:] 控制字符。

[:数字:] 数字字符。

[:图形:] 既可打印又可见的字符。 (空格是可打印的,但不可打印
可见,而 a 既是。)

[:降低:] 小写字母字符。

[:打印:] 可打印字符(不是控制字符的字符。)

[:点:] 标点符号(不是字母、数字、控制
字符或空格字符)。

[:空间:] 空格字符(例如空格、制表符和换页符,仅举几例)。

[:上:] 大写字母字符。

[:x数字:] 十六进制数字的字符。

例如,在 POSIX 标准之前,要匹配字母数字字符,您需要
不得不写 /[A-Za-z0-9]/. 如果您的字符集中有其他字母字符,
这不会匹配它们,并且如果您的字符集与 ASCII 的整理不同,则此
甚至可能不匹配 ASCII 字母数字字符。 使用 POSIX 字符类,
你可以写 /[[:alnum:]]/, 这与中的字母和数字字符匹配
你的字符集,不管它是什么。

两个额外的特殊序列可以出现在字符列表中。 这些适用于非 ASCII
字符集,可以有单个符号(称为 整理 分子) 那是
用多个字符表示,以及多个字符
相当于 整理,或排序,目的。 (例如,在法语中,一个简单的“e”和一个
重音“`”是等价的。)

整理符号
整理符号是包含在 [..].
例如,如果 ch 是一个整理元素,那么 [[.ch.]] 是一个正则表达式
匹配此整理元素,而 [频道] 是一个正则表达式
匹配 c or h.

等价类
等价类是特定于语言环境的字符列表的名称
相等的。 名称包含在 [==]. 例如,名称 e 可能是
用于表示所有的“e”、“´”和“`”。 在这种情况下, [[=e=]] 是常规的
匹配任何一个的表达式 e, e'e`.

这些功能在非英语语言环境中非常有价值。 库函数
呆子 用于正则表达式匹配,目前只识别 POSIX 字符
班级; 它们不识别整理符号或等价类。

\y, \B, \<, \>, \s, \S, \w, \W, \`\' 运营商特定于 呆子; 他们是
基于 GNU 正则表达式库中的工具的扩展。

各种命令行选项控制如何 呆子 以常规方式解释字符
表达式。

没有选项
在默认情况下, 呆子 提供 POSIX 正则表达式的所有功能
以及上述的 GNU 正则表达式运算符。

--posix
仅支持 POSIX 正则表达式,GNU 运算符并不特殊。
(例如, \w 匹配文字 w).

- 传统的
传统的 UNIX AWK 正则表达式匹配。 GNU 运算符不是
特殊和区间表达式不可用。 八进制描述的字符
和十六进制转义序列按字面处理,即使它们代表
正则表达式元字符。

--重新间隔
允许在正则表达式中使用区间表达式,即使 - 传统的 一直
提供。

行动
动作语句括在大括号中, {}. 动作语句由通常的
大多数语言中都有赋值、条件和循环语句。 运营商,
可用的控制语句和输入/输出语句仿照 C 中的语句进行模式化。

运营商
AWK 中的运算符按优先级递减的顺序是:

(...) 分组

$ 字段参考。

++ -- 递增和递减,前缀和后缀。

^ 求幂 (** 也可以使用,并且 **= 对于赋值运算符)。

+ - ! 一元加、一元减和逻辑否定。

* / % 乘法、除法和取模。

+ - 加减。

空间 字符串连接。

| |& 管道 I/O 函数getline, 打印的printf.

< > <= >= != ==
常规关系运算符。

~ !~ 正则表达式匹配,否定匹配。 注意: 不要使用固定的正则
表达(/富/) 在 a 的左侧 ~ or !~. 只使用一个
右侧。 表达方式 /富/ ~ EXP 具有相同的含义 ((0 美元 ~
/富/) ~ EXP)。 通常是 不能 你想要什么。

in 数组成员。

&& 逻辑与。

|| 逻辑或。

?: C 条件表达式。 这有形式 表达式1 ? 表达式2 : 表达式3。 如果
表达式1 为真,表达式的值为 表达式2,否则是 表达式3.
只有其中之一 表达式2表达式3 被评估。

= += -= *= /= %= ^=
任务。 两者都绝对赋值 (VAR = 折扣值) 和运算符分配
(其他形式)支持。

系统 声明
控制语句如下:

if (流程条件) 声明 [ 其他 声明 ]
(流程条件) 声明
do 声明 (流程条件)
(表达式1; 表达式2; 表达式3) 声明
(VAR in 排列) 声明
打破
继续
删除 排列[指数]
删除 排列
出口 [ 表达 ]
{ 声明 }
开关 (表达) {
案件 折扣值|正则表达式 : 声明
...
[ 默认情况下: 声明 ]
}

I / O 声明
输入/输出语句如下:

关闭(文件 [, 形成一种]) 关闭文件、管道或协同进程。 可选的 形成一种 应该只是
在将双向管道的一端关闭到协同过程时使用。 它
必须是字符串值,或者 “至” or “从”.

函数getline$0 从下一个输入记录; 放 NF, NR, FNR, RT.

函数getline <文件$0 从下一个记录 文件; 设置 NF, RT.

函数getline VARVAR 从下一个输入记录; 放 NR, FNR, RT.

函数getline VAR <文件VAR 从下一个记录 文件, RT.

命令 | 函数getline [VAR]
运行 命令 将输出管道输送到 $0 or VAR,如上,和
RT.

命令 |& 函数getline [VAR]
运行 命令 作为协同处理管道将输出或 $0 or VAR,
如上所述,和 RT. 协程是一个 呆子 延期。 (命令 能够
也是一个插座。 见小节 Special 文件 名称,如下)。

下页 停止处理当前输入记录。 下一个输入记录是
读取和处理从 AWK 中的第一个模式开始
程序。 到达输入数据的末尾时, 呆子 执行任何
结束 规则。

下一个文件 停止处理当前输入文件。 读取的下一条输入记录
来自下一个输入文件。 文件名阿尔金 已更新,
FNR 重置为 1,处理从第一个模式开始
在 AWK 程序中。 到达输入数据的末尾时, 呆子
执行任何 结束 规则。

打印 打印当前记录。 输出记录以
价值 ORS.

打印 表达式列表 打印表达式。 每个表达式由值分隔
飞行服务队. 输出记录以值终止 ORS.

打印 表达式列表 >文件 打印表达式 文件. 每个表达式由
价值 飞行服务队. 输出记录以值终止
ORS.

的printf fmt, 表达式列表 格式化并打印。 看 的printf 个人陈述下文。

的printf fmt, 表达式列表 >文件
格式化并打印 文件.

系统(命令行) 执行命令 命令行, 并返回退出状态。 (这可能
在非 POSIX 系统上不可用。)

冲洗([文件]) 刷新与打开的输出文件或管道关联的所有缓冲区 文件.
If 文件 丢失或如果它是空字符串,则刷新所有打开
输出文件和管道。

允许额外的输出重定向 打印的printf.

打印 ... >> 文件
将输出附加到 文件.

打印 ... | 命令
写在管道上。

打印 ... |& 命令
将数据发送到协进程或套接字。 (另见小节 Special 文件 名称,
下面。)

函数getline 命令成功时返回 1,文件结束时返回 0,错误时返回 -1。 在一个
错误, 错误号 设置为描述问题的字符串。

注意: 打开双向套接字失​​败导致返回非致命错误
调用函数。 如果使用管道、协进程或套接字来 函数getline,或从 打印 or
的printf 在一个循环中,你 必须 使用 关() 创建命令的新实例或
插座。 AWK 在返回时不会自动关闭管道、套接字或协进程
EOF。

的printf 个人陈述
AWK 版本的 的printf 声明和 冲刺() 函数(见下文)接受
以下转换规范格式:

%c 单个字符。 如果参数用于 %c 是数字,它被视为
字符和打印。 否则,参数被假定为一个字符串,并且
只打印该字符串的第一个字符。

%d, %i 一个十进制数(整数部分)。

%e, %E 形式为 [ 的浮点数-]d.DDDDDDe[+-]dd。 该 %E 格式使用 E
而不是 e.

%f, %F 形式为 [ 的浮点数-]DDD.DDDDDD. 如果系统库支持
它, %F 也可用。 这就像 %f,但使用大写字母表示特殊
“非数字”和“无穷大”值。 如果 %F 不可用, 呆子 使用 %f.

%g, %G 使用 %e or %f 转换,以较短者为准,带有不重要的零
压制。 这 %G 格式使用 %E 而不是 %e.

%o 一个无符号八进制数(也是一个整数)。

%u 一个无符号十进制数(同样是一个整数)。

%s 一个字符串。

%x, %X 一个无符号的十六进制数(一个整数)。 这 %X 格式使用 ABCDEF 而不是
ABCDEF.

%% 一个单一的 % 特点; 没有参数被转换。

可选的,附加参数可能位于 % 和控制信:

$ 使用 '此时格式中的第一个参数。 这被称为一个
阵地 说明符 主要用于翻译版本的
格式字符串,而不是在 AWK 程序的原始文本中。 它是一个 呆子
延期。

- 表达式应在其字段内左对齐。

空间 对于数字转换,用空格前缀正值和负值
带有减号。

+ 在宽度修饰符(见下文)之前使用的加号表示总是提供一个
数字转换的符号,即使要格式化的数据是正数。 这 +
覆盖空间修饰符。

# 对某些控制字母使用“替代形式”。 为了 %o, 提供领先的
零。 为了 %x%X, 提供领先的 0x or 0X 对于非零结果。 为了 %e, %E,
%f%F,结果总是包含一个小数点。 为了 %g%G, 尾随
零不会从结果中删除。

0 领先 0 (零)作为一个标志,表示输出应该填充
零而不是空格。 这仅适用于数字输出格式。 这
标志仅在字段宽度大于要打印的值时有效。

' 单引号字符指示 呆子 插入语言环境的千位分隔符
字符转换为十进制数,并使用语言环境的小数点
具有浮点格式的字符。 这需要正确的语言环境支持
C 库并在当前语言环境中定义。

宽度 该字段应填充到此宽度。 该字段通常填充有
空间。 随着 0 标志,它用零填充。

.PREC 一个数字,指定打印时使用的精度。 为了 %e, %E, %f
%F, 格式,这指定要打印在右侧的位数
小数点。 为了 %g%G 格式,它指定了最大数量
有效数字。 为了 %d, %i, %o, %u, %x%X 格式,它指定
要打印的最少位数。 为了 %s,它指定了最大数量
应该打印的字符串中的字符。

动态 宽度PREC ISO C 的能力 打印输出() 支持例程。 一个 *
代替 宽度 or PREC 规范导致它们的值取自
参数列表到 的printf or 冲刺(). 使用带有动态的位置说明符
宽度或精度,提供 $* 在格式字符串中。 例如,
“%3$*2$.*1$s”.

Special 文件 名称
从任何一个进行 I/O 重定向时 打印 or 的printf 到一个文件,或通过 函数getline
文件, 呆子 在内部识别某些特殊文件名。 这些文件名允许访问
打开继承自的文件描述符 呆子的父进程(通常是 shell)。 这些
文件名也可用于命令行来命名数据文件。 文件名是:

- 标准输入。

/开发/标准输入 标准输入。

/开发/标准输出 标准输出。

/开发/标准错误 标准错误输出。

/开发/FD/n 与打开的文件描述符关联的文件 n.

这些对于错误消息特别有用。 例如:

打印 “你 自吹 它!” > "/开发/标准错误"

而你将不得不使用

打印 “你 自吹 它!” | “猫 1>&2"

以下特殊文件名可以与 |& 用于创建的协处理运算符
TCP/IP 网络连接:

/inet/TCP/端口/主机/报告
/inet4/TCP/端口/主机/报告
/inet6/TCP/端口/主机/报告
本地端口上的 TCP/IP 连接文件 端口 到远程主机 主机 在远程
端口 报告. 使用端口 0 让系统选择一个端口。 利用 /inet4 强迫
IPv4 连接,以及 /inet6 强制 IPv6 连接。 清楚的 /网络 使用
系统默认值(很可能是 IPv4)。

/inet/udp/端口/主机/报告
/inet4/udp/端口/主机/报告
/inet6/udp/端口/主机/报告
类似,但使用 UDP/IP 而不是 TCP/IP。

数字 主要工作内容
AWK 具有以下内置算术函数:

atan2(y, x) 返回的反正切 y / x 以弧度表示。

COS(表达式) 返回余弦 表达式,以弧度为单位。

exp(表达式) 指数函数。

内部(表达式) 截断为整数。

日志(表达式) 自然对数函数。

RAND() 返回一个随机数 N, 在 0 和 1 之间,使得 0 ≤ N <1。

罪(表达式) 返回正弦 表达式,以弧度为单位。

平方(表达式) 返回平方根 表达式.

斯兰德([表达式]) 使用 表达式 作为随机数生成器的新种子。 如果不 表达式 is
提供,使用一天中的时间。 返回随机的前一个种子
数字生成器。

主要工作内容
GAWK 具有以下内置字符串函数:

分类(s [, d [, 形成一种]]) 返回源数组中的元素数 s. 排序
的内容 s 运用 呆子比较值的正常规则,以及
替换排序值的索引 s 与顺序
从 1 开始的整数。如果可选的目标数组 d is
指定,第一个重复 sd,然后排序 d,离开
源数组的索引 s 不变。 可选字符串 形成一种
控制方向和比较模式。 有效值
形成一种 是任何有效的字符串 PROCINFO["sorted_in"]。 它
也可以是用户定义的比较函数的名称,如
描述于 PROCINFO["sorted_in"].

分类(s [, d [, 形成一种]])
返回源数组中的元素数 s. 行为
与...相同 分类(), 除了数组 指数 ,那恭喜你,
用于排序,而不是数组值。 完成后,数组是
数字索引,值是原始值
指数。 原始值丢失; 因此提供第二个
如果您想保留原始数组。 的目的
可选字符串 形成一种 与描述相同 分类() 以上。

根子(r, s, h [, t]) 搜索目标字符串 t 对于正则表达式的匹配
r。 如果 h 是一个以开头的字符串 g or G,然后全部替换
的比赛 r s。 除此以外, h 是一个数字,表示哪个
匹配的 r 取代。 如果 t 不提供,使用 $0 代替。
在替换文本中 s, 序列 \n,其中 n 是一个数字
从 1 到 9,可用于仅表示匹配的文本
n' 括号内的子表达式。 序列 \0 代表
整个匹配的文本,以及字符 &。 不像 子()
gsub(),修改后的字符串作为结果返回
函数,原始目标字符串为 不能 改变。

gsub(r, s [, t]) 对于匹配正则表达式的每个子字符串 r 在字符串中
t, 替换字符串 s,并返回数量
替代品。 如果 t 不提供,使用 $0。 一个 & ,在
替换文本被替换为实际的文本
匹配。 利用 \& 得到一个字面意思 &. (这必须键入为
"\\&"; 看到 GAWK: 有效 AWK 代码编程 进行更全面的讨论
的规则 &的替换文本中的 's 和反斜杠
子(), gsub()gensub().)

指数(s, t) 返回字符串的索引 t 在字符串中 s, 或 0 如果 t 是不是
展示。 (这意味着字符索引从 XNUMX 开始。)
使用正则表达式常量是一个致命错误 t.

长度([s]) 返回字符串的长度 s,或长度 $0 if s 是不是
提供。 作为非标准扩展,带有数组参数,
长度() 返回数组中元素的数量。

比赛(s, r [, a]) 返回位置在 s 正则表达式在哪里 r 发生,或
0如果 r 不存在,并设置值 启动长度.
请注意,参数顺序与 ~ 操作员:
STR ~ re. 如果数组 a 提供, a 被清除,然后元素
1年至 n 充满了 s 符合
对应括号中的子表达式 r. 第 0 个元素
of a 包含的部分 s 与整个正则匹配
表达 r. 下标 a[n, “开始”]a[n, “长度”]
分别提供字符串中的起始索引和长度,
每个匹配的子串。

分片(s, a [, r [, 九月]])
拆分字符串 s 进入数组 a 和分隔符数组 九月
关于正则表达式 r,并返回字段数。
元素值是 s 匹配的 r。 的价值
脓毒症[i] 是出现在前面的分隔符 a[i+ 1]。 如果 r
省略, 平面图 改为使用。 数组 a九月 ,那恭喜你,
首先清除。 拆分与字段拆分的行为相同
平面图, 如上所述。

分裂(s, a [, r [, 九月]])
拆分字符串 s 进入数组 a 和分隔符数组 九月
关于正则表达式 r,并返回字段数。 如果
r 省略, FS 改为使用。 数组 a九月 ,那恭喜你,
首先清除。 脓毒症[i] 是匹配的字段分隔符 r
之间 a[i]a[i+ 1]。 如果 r 是一个空格,然后领先
中的空格 s 进入额外的数组元素 步骤[0]
尾随空格进入额外的数组元素 脓毒症[n],
哪里 n 是返回值 分裂(s, a, r, 九月). 分裂
行为与如上所述的场分裂相同。

sprintf的(fmt, 表达式列表) 打印 表达式列表 根据 fmt,并返回结果字符串。

锶(STR) 检查 STR,并返回其数值。 如果 STR 以一个开始
领导 0, 将其视为八进制数。 如果 STR 以一个开始
领导 0x or 0X, 将其视为十六进制数。 否则,
假设它是一个十进制数。

子(r, s [, t]) 就像 gsub(),但只替换第一个匹配的子字符串。

子字符串(s, i [, n]) 最多返回 n-字符的子串 s 开始于 i。 如果 n
被省略,使用其余的 s.

降低(STR) 返回字符串的副本 STR, 所有大写字符
in STR 翻译成相应的小写字母。
非字母字符保持不变。

上衣(STR) 返回字符串的副本 STR, 所有小写字符
in STR 翻译成相应的大写字母。
非字母字符保持不变。

GAWK 是多字节感知。 这意味着 指数(), 长度(), 子字符串()比赛() 所有工作
就字符而言,而不是字节。

时间 主要工作内容
由于 AWK 程序的主要用途之一是处理包含时间的日志文件
邮票信息, 呆子 提供以下获取时间戳的函数和
格式化它们。

时间(日期规格)
日期规格 转换为与返回的格式相同的时间戳 系统时间()
返回结果。 这 日期规格 是一个字符串形式 YYYY MM DD HH MM 党卫军[
夏令时]. 字符串的内容是六个或七个数字,代表
分别是包括世纪在内的全年、从 1 到 12 的月份、
从 1 到 31 的月份,从 0 到 23 的一天中的小时,从 0 到 XNUMX 的分钟
59,秒从 0 到 60,还有一个可选的夏令时标志。 价值
这些数字不需要在规定的范围内; 例如,一个小时
-1 表示午夜前 1 小时。 零原点公历是
假设,第 0 年在第 1 年之前,第 -1 年在第 0 年之前。时间是
假设在本地时区。 如果夏令时标志为正,
时间假定为夏令时; 如果为零,则假定时间为
是标准时间; 如果为负(默认值), 时间() 试图确定
夏令时是否在指定时间生效。 如果 日期规格
不包含足够的元素或如果结果时间超出范围,
时间() 返回-1。

时间([格式 [, 时间戳[, UTC 标志]]])
格式 时间戳 根据规范 格式。 如果 UTC 标志 is
存在且非零或非空,结果为UTC,否则结果
是当地时间。 这 时间戳 应该与返回的形式相同
系统时间()。 如果 时间戳 丢失,使用当前时间。 如果 格式
缺少,相当于输出的默认格式 日期(1) 使用。 这
默认格式可在 PROCINFO["strftime"]. 参见规范
时间() 用于保证格式转换的 ISO C 函数
可用。

系统时间() 返回当前时间作为自 Epoch 以来的秒数
(POSIX 系统上的 1970-01-01 00:00:00 UTC)。

操作方式 主要工作内容
GAWK 提供以下位操作功能。 它们通过转换双
精度浮点值到 uintmax_t 整数,做运算,然后
将结果转换回浮点数。 这些功能是:

和(v1, v2 [,……]) 返回参数列表中提供的值的按位与。
必须至少有两个。

复合(VAL) 返回的按位补码 VAL.

移位(VAL, ) 返回值 VAL, 左移 位。

或者(v1, v2 [,……]) 返回参数列表中提供的值的按位或。
必须至少有两个。

移位(VAL, ) 返回值 VAL,右移 位。

异或(v1, v2 [,……]) 返回参数列表中提供的值的按位异或。
必须至少有两个。

Type 功能
以下函数用于多维数组。

数组(x)
返回真如果 x 是一个数组,否则为假。

国际化 主要工作内容
可以在 AWK 程序中使用以下函数来翻译字符串
在运行时。 有关完整的详细信息,请参阅 GAWK: 有效 AWK 代码编程.

绑定文本域(目录 [, ])
指定目录 呆子 寻找 .gmo 文件,以防他们不会或
不能放置在“标准”位置(例如,在测试期间)。 它返回
所在的目录 是“绑定的”。
默认值 是的价值 文本域。 如果 目录 是空字符串
(""), 然后 绑定文本域() 返回给定的当前绑定 .

dcgettext(绳子 [, [, 类别]])
返回翻译 绳子 在文本域 对于语言环境类别
类别. 默认值为 是当前值 文本域。 该
默认值 类别 is “LC_MESSAGES”.
如果你提供一个值 类别,它必须是一个等于已知的字符串之一
中描述的语言环境类别 GAWK: 有效 AWK 代码编程. 你还必须
提供一个文本域。 利用 文本域 如果您想使用当前域。

dcgettext(string1, string2, [, [, 类别]])
返回用于的复数形式 的翻译 string1string2 in
文本域 对于语言环境类别 类别. 默认值为 is
的当前值 文本域. 默认值为 类别 is “LC_MESSAGES”.
如果你提供一个值 类别,它必须是一个等于已知的字符串之一
中描述的语言环境类别 GAWK: 有效 AWK 代码编程. 你还必须
提供一个文本域。 利用 文本域 如果您想使用当前域。

用户自定义 职能


AWK 中的函数定义如下:

功能 姓名(参数 名单) { 声明 }

函数在以模式或模式从表达式中调用时执行
行动。 函数调用中提供的实际参数用于实例化
函数中声明的形式参数。 数组通过引用传递,其他
变量是按值传递的。

由于函数最初不是 AWK 语言的一部分,因此提供了本地
变量相当笨拙:它们在参数列表中被声明为额外的参数。
约定是用额外的空格将局部变量与实参分开
参数列表。 例如:

功能 f(p, q, a, b) # a b ,那恭喜你, 本地
{
...
}

/美国广播公司/ { ... ; f(1, 2) ; ... }

函数调用中的左括号需要紧跟在函数后面
名称,中间没有任何空格。 这避免了语法上的歧义
连接运算符。 此限制不适用于列出的内置函数
以上。

函数可以相互调用并且可以递归。 函数参数用作本地
变量在函数调用时被初始化为空字符串和数字零。

使用 回报 表达式 从函数返回一个值。 如果没有,则返回值未定义
提供值,或者如果函数通过“脱落”结束返回。

RedFern 呆子 扩展,函数可以被间接调用。 为此,分配名称
要调用的函数,作为一个字符串,到一个变量。 然后像使用变量一样使用它
是函数的名称,前缀为 @ 签名,像这样:
功能 我的函数()
{
打印 “我的功能 称为“
...
}

{ ...
the_func = “我的功能”
@the_func() # 呼叫 通过 the_func 我的功能
...
}
从 4.1.2 版本开始,这适用于用户定义的函数、内置函数和
扩展功能。

If - 皮棉 已提供, 呆子 在解析时警告调用未定义的函数,
而不是在运行时。 在运行时调用未定义的函数是一个致命错误。

这个单词 FUNC 可以用来代替 功能,虽然这已被弃用。

动态的 载入中 NEW 职能


您可以动态地向运行中添加新的内置函数 呆子 口译员
@加载 陈述。 完整的细节超出了本手册页的范围; 看 GAWK:
有效 AWK 代码编程.

讯号


呆子 profiler 接受两个信号。 信号灯1 导致它转储配置文件和功能
调用堆栈到配置文件,要么 awkprof.out, 或任何命名的文件
- 轮廓 选项。 然后它继续运行。 签到 原因 呆子 抛弃
profile 和函数调用堆栈,然后退出。

国际化


字符串常量是用双引号括起来的字符序列。 非英语
口语环境中,可以将 AWK 程序中的字符串标记为需要
翻译成当地的自然语言。 此类字符串在 AWK 程序中标记为
前导下划线(“_”)。 例如,

呆子 '开始 { 打印 “你好, 世界” }'

总是打印 您好, 世界。 但,

呆子 '开始 { 打印 _“你好, 世界” }'

可能会打印 卓悦, 世界 在法国。

生成和运行可本地化的 AWK 程序涉及几个步骤。

1。 添加一个 开始 为值赋值的动作 文本域 设置文本域的变量
与您的程序相关联的名称:

开始 { 文本域 = “我的程序” }

这允许 呆子 找到了 .gmo 与您的程序相关联的文件。 没有这个
步, 呆子 使用 条未读消息 文本域,可能不包含翻译
为您的程序。

2. 用前导下划线标记所有应翻译的字符串。

3. 如有必要,使用 dcgettext()绑定文本域() 程序中的函数,
作为适当的。

4。 运行 呆子 --gen-pot -f 我的程序.awk > myprog.pot 生成一个 。锅 为您的文件
程序。

5. 提供相应的翻译,并构建安装相应的 .gmo 文件。

国际化特性在 GAWK: 有效 AWK
代码编程.

POSIX 兼容性


一个主要目标 呆子 与 POSIX 标准以及
Brian Kernighan 的最新版本 AWK. 为此, 呆子 包含以下内容
AWK 书中未描述但属于 Brian 的一部分的用户可见功能
克尼汉的版本 AWK, 并且符合 POSIX 标准。

这本书表明命令行变量赋值发生在 AWK 否则会
将参数作为文件打开,该文件位于 开始 规则被执行。 然而,在
早期的实现,当这样的分配出现在任何文件名之前,
分配会发生 before开始 规则运行。 应用程序开始依赖
此功能。” 什么时候 AWK 已更改以匹配其文档, -v 选项
在添加程序执行之前分配变量以适应应用程序
取决于旧的行为。 (此功能得到了贝尔和
实验室和 GNU 开发人员。)

在处理参数时, 呆子 使用特殊选项“--”表示结束
论据。 在兼容模式下,它会警告但忽略未定义的选项。
在正常操作中,此类参数会传递给 AWK 程序以供其处理。

AWK书没有定义返回值 srand(). POSIX 标准有它
返回它正在使用的种子,以允许跟踪随机数序列。
因此 srand() in 呆子 还返回其当前种子。

其他新功能有: 使用多个 -f 选项(来自 MKS AWK); 该 环保 大批;
\a\v 转义序列(最初在 呆子 并反馈到钟
实验室版); 这 降低()顶部() 内置函数(来自 Bell
实验室版); 和 ISO C 转换规范 的printf (首先在
贝尔实验室版本)。

历史的 特点


历史 AWK 实现的一个特点是 呆子 支持:有可能
打电话给 长度() 内置函数不仅没有参数,而且甚至没有
括弧! 因此,

a = 长度 # 大陵 蝙蝠侠!

与任何一个相同

a = 长度()
a = 长度($0)

使用此功能是一种糟糕的做法,并且 呆子 发出有关其使用的警告,如果 - 皮棉 is
在命令行中指定。

GNU EXTENSIONS


GAWK 对 POSIX 的扩展数量过多 AWK. 他们在这个
部分。 此处描述的所有扩展都可以通过调用来禁用 呆子
- 传统的 or --posix 选项​​。

具有以下特点 呆子 在 POSIX 中不可用 AWK.

· 不为通过命名的文件执行路径搜索 -f 选项。 因此 路径
环境变量并不特殊。

· 没有进行文件包含的工具(呆子's @包括 机制)。

· 没有动态添加用 C 编写的新函数的功能(呆子's @加载
机制)。

· \x 转义序列。 (禁用与 --posix.)

· 后继续线的能力 ?:. (禁用与 --posix.)

· AWK 程序中的八进制和十六进制常量。

· 阿尔金, 二进制模式, 错误号, 皮棉, RT文本域 变量并不特殊。

· 忽略案例 变量及其副作用不可用。

· 场宽 可变和固定宽度的字段分割。

· 平面图 基于字段值的变量和字段拆分。

· 信息 数组不可用。

· 指某东西的用途 RS 作为正则表达式。

· 无法识别可用于 I/O 重定向的特殊文件名。

· |& 用于创建协同进程的运算符。

· 开始文件结束文件 特殊图案不可用。

· 能够使用空字符串作为 FS,
并作为第三个论点 分裂().

· 可选的第四个参数 分裂() 接收分隔符文本。

· 可选的第二个参数 关() 功能。

· 可选的第三个参数 比赛() 功能。

· 使用位置说明符的能力 的printf冲刺().

· 能够将数组传递给 长度().

· 和(), 分类(), 分类(), 绑定文本域(), 复合(), dcgettext(), dcgettext(),
gensub(), lshift(), 时间(), 或者(), 帕斯普利特(), 右移(), 时间(), strtonum(),
系统时间()异或() 功能。

· 可本地化的字符串。

AWK书没有定义返回值 关() 功能。 GAWK's 关()
返回值来自 关闭(3),或 关闭(3)、关闭输出文件或管道时,
分别。 它在关闭输入管道时返回进程的退出状态。 这
如果指定的文件、管道或协同进程没有用
重定向。

什么时候 呆子 被调用 - 传统的 选项,如果 fs 论证 -F 选项是
“t”,然后 FS 设置为制表符。 注意打字 呆子 -F\t ... 简单地导致
shell 引用“t”,并且不将“\t”传递给 -F 选项。 由于这是一个
相当丑陋的特殊情况,这不是默认行为。 这种行为也不
如果发生 --posix 已指定。 真正获得制表符作为字段
分隔符,最好使用单引号: 呆子 -F'\t' ....

环境 变数


路径 环境变量可用于提供目录列表 呆子
在查找通过命名的文件时进行搜索 -f, - 文件, -i- 包括 选项。 如果
初始搜索失败,追加后再次搜索路径 .awk 到文件名。

awklibpath 环境变量可用于提供目录列表 呆子
在查找通过命名的文件时进行搜索 -l- 加载 选项​​。

GAWK_READ_TIMEOUT 环境变量可用于指定超时
从终端、管道或双向通信读取输入的毫秒数,包括
插座。

要通过套接字连接到远程主机, GAWK_SOCK_RETRIES 控制数量
重试,和 GAWK_MSEC_SLEEP 以及重试之间的间隔。 区间在
毫秒。 在不支持的系统上 使用睡眠(3), 该值四舍五入为
整数秒。

If POSIXLY_CORRECT 存在于环境中,则 呆子 表现得就像 --posix 民政事务总署
在命令行中指定。 如果 - 皮棉 已指定, 呆子 发出警告
大意如此的消息。

退出 状态


如果 出口 语句与一个值一起使用,然后 呆子 以给定的数值退出
到它。

否则,如果在执行过程中没有问题, 呆子 以 C 的值退出
常数 退出_成功. 这通常为零。

如果发生错误, 呆子 以 C 常量的值退出 退出_失败。 这是
通常是一个。

If 呆子 由于致命错误退出,退出状态为 2。在非 POSIX 系统上,这
值可以映射到 退出_失败.

VERSION 相关信息


此手册页文档 呆子版本4.1。

作者


UNIX的原始版本 AWK 由 Alfred Aho、Peter 设计和实施
Weinberger 和贝尔实验室的 Brian Kernighan。 布赖恩·克尼汉 (Brian Kernighan) 继续
维护和加强它。

自由软件基金会的保罗·鲁宾 (Paul Rubin) 和杰伊·芬拉森 (Jay Fenlason) 写道 呆子, 兼容
与原始版本 AWK 在第七版 UNIX 中分发。 约翰伍兹
贡献了许多错误修复。 大卫·特鲁曼,在阿诺德·罗宾斯的帮助下,
制成 呆子 兼容新版 UNIX AWK. 阿诺德罗宾斯是当前
维护者。

我们 GAWK: 有效 AWK 代码编程 完整的贡献者名单 呆子 以及
文档。

查看 读我 文件中 呆子 分发有关维护者的最新信息
以及当前支持哪些端口。

BUG 报告


如果你发现一个错误 呆子, 请发送电子邮件至 [电子邮件保护]。 请
包括您的操作系统及其修订版、版本 呆子 (从 呆子 - 版),
你用哪个C编译器来编译它,以及一个测试程序和数据小到
可以重现问题。

在发送错误报告之前,请执行以下操作。 首先,确认你有
最新版本 呆子. 每个版本都修复了许多错误(通常是细微的错误),
如果你的已经过时了,问题可能已经解决了。 二、请看
如果设置环境变量 LC_ALLLC_ALL=C 使事情像你一样行事
预计。 如果是这样,那就是语言环境问题,可能是也可能不是真的是错误。 最后请
仔细阅读本手册页和参考手册,以确保您认为
错误确实存在,而不仅仅是语言中的一个怪癖。

无论你做什么,做 不是 发布错误报告 程序语言.awk。 虽然 呆子 开发
偶尔阅读这个新闻组,发布错误报告有一种不可靠的报告方式
错误。 相反,请使用上面给出的电子邮件地址。 真的。

如果您使用的是 GNU/Linux 或基于 BSD 的系统,您可能希望提交错误报告至
您的发行版的供应商。 没关系,但请发送一份副本给官方
电子邮件地址也是如此,因为不能保证错误报告会被转发到
呆子 维护者。

使用 onworks.net 服务在线使用 gawk


免费服务器和工作站

下载 Windows 和 Linux 应用程序

Linux 命令

Ad