awk编程指南:从基础到实践

需积分: 12 39 下载量 184 浏览量 更新于2024-07-25 收藏 205KB PDF 举报
"awk手册.pdf (高清)" awk是一种强大的文本分析工具,主要在Linux和Unix环境中使用。由Alfred Aho、Brian Kernighan和Peter Weinberger三人开发,其名称来源于他们的姓氏首字母。awk的工作原理是逐行读取输入文件,根据用户定义的模式对匹配的行执行相应的操作。如果没有指定模式,awk会处理所有行。在Linux系统中,awk通常是gawk的软链接,gawk是GNU项目实现的awk版本,它包含了更多的扩展功能。 awk的命令格式有两种: 1. 直接在命令行中编写awk脚本:`awk [options]'script' var=value file(s)` 2. 使用外部脚本文件:`awk [options] -f scriptfile var=value file(s)` 其中,`options`是可选的命令行选项,例如`-F`用于设置字段分隔符,`-v`用于设置用户自定义变量,而`script`或`scriptfile`包含awk程序的代码。 awk的两个核心概念是模式和操作。模式定义了awk处理的行的规则,而操作则是对匹配模式的行执行的动作。模式可以是正则表达式或者逻辑表达式,操作可以是打印、计算或者其他控制结构。 awk有多种内置的环境变量,如`NR`表示当前处理的记录(行)数,`NF`表示当前记录中的字段(域)数量,`FS`默认的字段分隔符等。此外,awk支持丰富的运算符,包括关系运算符、逻辑运算符和算术运算符,用于构建复杂的条件判断。 在awk中,记录通常指的是输入的一行,而域是记录中由字段分隔符分开的部分。默认情况下,字段分隔符是空格或制表符,但可以通过`-F`选项自定义。例如,如果`-F:`,则以冒号为分隔符。 gawk还提供了一些特有的正则表达式元字符和POSIX字符集,增强了正则表达式的匹配能力。匹配操作符`~`用来检查字符串是否符合正则表达式。例如,`/pattern/`表示匹配模式`pattern`。 awk的编程元素包括变量(支持自动类型转换)、BEGIN和END块(在处理任何输入之前和处理完所有输入之后执行)、重定向和管道,以及条件语句(如`if-else`结构)和循环(如`for`和`while`循环)。数组在awk中也是关键部分,可以存储任意类型的元素。最后,awk有一系列内置函数,如`length()`、`split()`等,用于字符串处理和数学计算。 通过上述知识点,你可以编写awk脚本来处理和分析文本数据,例如检查passwd文件的有效性、统计文件中的词频、提取特定格式的数据等。awk的灵活性和强大功能使其成为Linux/Unix环境中不可或缺的工具。
2021-08-24 上传
1. 前言 这是一本awk学习指引, 其重点着重于 :  awk 适于解决哪些问题 ?  awk 常见的解题模式为何 ? 为使读者快速掌握awk解题的模式及特性, 本手册系由一些较具代表性的范例及其题解所构成; 各范例由浅入深, 彼此间相互连贯,范例中并对所使用的awk语法及指令辅以必要的说明. 有关 awk的指令, 函数,...等条列式的说明则收录于附录中, 以利读者往后撰写程序时查阅. 如此编排, 可让读者在短时间内顺畅地学会使用awk来解决问题. 建议读者循着范例上机实习, 以加深学 习效果. 读者宜先具备下列背景 : [a.] UNIX 环境下的简单操作及基本概念. 例如 : 文件编辑, 文件复制 及 管道, 输入/输出重定向 等概念 [b.] C 语言的基本语法及流程控制指令. (awk 指令并不多, 且其中之大部分与 C语言中之用法一致, 本手册中对该类指令之语法及特性 不再加以繁冗的说明, 读者若欲深究,可自行翻阅相关的 C 语言书籍) 2. awk概述 为什么使用awk awk 是一种程序语言. 它具有一般程序语言常见的功能. 因awk语言具有某些特点, 如 : 使用直译器(Interpreter)不需先行编译; 变量无类型之分 (Typeless), 可使用文字当数组的下标(Associative Array)...等特色. 因此, 使用awk撰写程序比起 使用其它语言更简洁便利且节省时间. awk还具有一些内建功能, 使得awk擅于处理具数据行 (Record), 字段(Field)型态的资料; 此外, awk内建有pipe的功能, 可将处理中的数据传送给外部 的 Shell命令加以处理, 再将Shell命令处理后的数据传回awk程序, 这个特点也使得awk程序很 容易使用系统资源. 由于awk具有上述特色, 在问题处理的过程中, 可轻易使用awk来撰写一些小工具; 这些小工具 并非用来解决整个大问题,它们只扮演解决个别问题过程的某些角色, 可藉由Shell所提供的pipe 将数据按需要传送给不同的小工具进行处理, 以解决整个大问题. 这种解题方式, 使得这些小工 具可因不同需求而被重复组合及重用(reuse); 也可藉此方式来先行测试大程序原型的可行性与 正确性, 将来若需要较高的执行速度时再用C语言来改写.这是awk最常被应用之处. 若能常常 如此处理问题, 读者可以以更高的角度来思考抽象的问题, 而不会被拘泥于细节的部份. 本手册为awk入门的学习指引, 其内容将先强调如何撰写awk程序,未列入进一步解题方式的应 用实例, 这部分将留待UNIX进阶手册中再行讨论.