awk的程序执行过程,总是先读取一部分数据到buf下,根据RS截取一段段记录下来。
RS做为awk的内置变量,即可以在awk程序中进行设置,也可以用参数的形式进行指定。
这篇文章讨论的是从awk的源码去分析在不同的RS下的三种执行分支及其相应的效率
以下开始分析源码:
首先,awk调用get_a_record 函数获取单条记录,在get_a_record函数里,先读入一段数据到buf下
iop->count = read(iop->fd, iop->buf, iop->readsize);
再对buf进行分析,根据RS截取一段记录
ret = (*matchrec)(iop, & recm, & state);
这里的matchrec 函数指针指向的函数,就是用来做RS匹配的,具体是哪个函数呢?根据不同的RS,有这么三种附值结果
if (RS->stlen == 0) {
RS_is_null = TRUE;
}
else if (RS->stlen > 1) {
matchrec = rsrescan;
}
else matchrec = rs1scan;
可见,awk的根据不同的RS,实际上是走三种流程去从buf里截取一条记录信息的。
1:默认的/n,或null, 这个在程序里,相当简洁的单字符判断(while (*bp != rs)bp++;),效率也是最高的。
2:多字符,这个实际上把RS当成了正则,调用了正则去匹配了。这里讨论下去,就是awk的正则效率问题了。
3:非/n的单字符。这个涉及到awk的历史,为了兼顾不同的locale,这里的单字符判断不似第一种那样简单的判断,还对各类字符的字符长度进行了兼容性的扩展判断,直接影响了效率
源码里很长的一段说明有兴趣的可以去看看,这边只转其中一句话:
/* Thus, the check for /n here; big speedup ! */
awk的程序执行过程,总是先读取一部分数据到buf下,根据RS截取一段段记录下来。
RS做为awk的内置变量,即可以在awk程序中进行设置,也可以用参数的形式进行指定。
这篇文章讨论的是从awk的源码去分析在不同的RS下的三种执行分支及其相应的效率
以下开始分析源码:
首先,awk调用get_a_record 函数获取单条记录,在get_a_record函数里,先读入一段数据到buf下
iop->count = read(iop->fd, iop->buf, iop->readsize);
再对buf进行分析,根据RS截取一段记录
ret = (*matchrec)(iop, & recm, & state);
这里的matchrec 函数指针指向的函数,就是用来做RS匹配的,具体是哪个函数呢?根据不同的RS,有这么三种附值结果
if (RS->stlen == 0) {
RS_is_null = TRUE;
}
else if (RS->stlen > 1) {
matchrec = rsrescan;
}
else matchrec = rs1scan;
可见,awk的根据不同的RS,实际上是走三种流程去从buf里截取一条记录信息的。
1:默认的/n,或null, 这个在程序里,相当简洁的单字符判断(while (*bp != rs)bp++;),效率也是最高的。
2:多字符,这个实际上把RS当成了正则,调用了正则去匹配了。这里讨论下去,就是awk的正则效率问题了。
3:非/n的单字符。这个涉及到awk的历史,为了兼顾不同的locale,这里的单字符判断不似第一种那样简单的判断,还对各类字符的字符长度进行了兼容性的扩展判断,直接影响了效率
源码里很长的一段说明有兴趣的可以去看看,这边只转其中一句话:
/* Thus, the check for /n here; big speedup ! */
分享到:
相关推荐
在IT行业中,awk是一种强大的文本分析工具,常用于处理和解析结构化数据文件,如日志文件或CSV数据。在Windows环境下,由于默认不提供awk命令,因此在编译Apache HTTPD服务器等需要awk功能的项目时,我们需要自行...
在IT领域,`awk`是一种强大的文本分析工具,它允许用户根据模式匹配处理文本文件。在Linux系统中,`awk`被广泛用于数据提取、格式转换和报告生成等任务。这个压缩包`awk实用程序源码.zip`包含了`awk`的源码,这对于...
awk 在 Linux 中的深入分析 awk 是一款功能强大且灵活的文本处理工具,在 Linux 系统中广泛应用于数据处理、文本处理和报表生成等领域。本文档将深入分析 awk 的使用和实现机制,探讨 awk 的内置变量、指令和函数,...
AWK是一种强大的文本分析工具,常用于数据处理、报告生成和脚本编写,在UNIX和类UNIX系统中广泛使用。本书通过深入浅出的方式,详细介绍了AWK的语法、模式匹配、函数、输入/输出等方面的知识,帮助读者提升AWK编程...
MOXA AWK-3121 的 web 功能配置主要包括三个部分:IP 网络参数、工作模式选择和功率增强。 1. IP 网络参数:在 web 配置页面中,可以设置 IP 地址、子网掩码、默认网关、DNS 服务器等参数。 2. 工作模式选择:MOXA...
#### 一、AWK简介及背景 - **AWK**是一种功能强大的文本处理工具,最初由贝尔实验室的Alfred Aho、Peter Weinberger和Brian Kernighan共同开发,因此得名AWK。尽管这个名字听起来有些奇怪,但AWK却是一种极其实用且...
**awk** 是一种强大的文本处理工具,常用于Linux/Unix系统中进行数据提取、分析及格式化工作。其名称来源于三位创建者:Alfred Aho、Brian Kernighan 和 Peter Weinberger 的名字首字母缩写。 ##### 基本命令格式:...
awk 是一种功能强大的文本处理工具,它可以对文本进行处理、格式化和输出。awk 的主要用途是处理文本文件,提取和处理数据,生成报表等。下面是一份 awk 教程,从基础知识到高级应用,涵盖了 awk 的基本概念、语法、...
- **功能定位**:Awk 是一种文本模式扫描和处理工具,其功能远远超过了 sed 和 grep 这类工具。它不仅能够进行模式匹配,还能执行复杂的文本处理任务,包括数学运算、流程控制等。 #### 二、Awk 的特点与优势 1. *...
Awk是一种编程语言,用于处理文本模式和报告生成。它主要用于Linux操作系统,并广泛应用于UNIX Shell编程中。Awk按照记录和字段的方式来查看文本文件,每个记录通常对应文件的一行,而字段则是记录中的数据单元,...
#### 三、awk模式与动作 awk的核心功能之一是通过模式匹配来选择特定的输入行,并执行相应的动作。模式可以是简单的字符串匹配、正则表达式或者预定义的模式如BEGIN和END。 - **模式匹配**:模式通常以`/pattern/`...
awk是一种强大的文本分析工具,广泛应用于Linux和Unix系统中,用于处理结构化数据,如CSV、TSV格式的文件。它通过模式匹配和动作来处理输入流中的每一行,允许用户定制复杂的文本处理逻辑。下面将详细介绍awk的基本...
awk 的架构包括三个部分: Pattern、Action 和 Output。Pattern 用于匹配记录,Action 用于处理记录,Output 用于输出处理结果。 awk 手册中文版提供了 awk 的基础知识和实践指南,旨在帮助读者快速掌握 awk 的使用...
AWK是一种强大的文本处理工具,主要用于模式扫描与处理语言,广泛应用于数据处理、报告生成、格式转换等场景。其核心在于能够自动读取文件的每一行,并按照预定义的规则对数据进行处理。 ### RS (Record Separator)...
1978 Awk Paper-'Awk-模式扫描和处理语言(第二版)(1978)': : 方便的Awk备忘单: : Archive.org链接到Awk编程语言PDF: : 还有一个很好的单线列表: : Karabiner Elements-可以使用点击器(模拟键盘)...
在第三部分中,书中介绍了gawk的高级功能,包括对gawk进行国际化处理的方法。国际化是将程序本地化为不同语言和区域设置的关键步骤。此外,还包括了gawk程序的调试技巧,以及如何使用gawk进行算术运算,包括任意精度...