2.4. 一门模式匹配的编程语言

未匹配的标注

一门模式匹配的编程语言

将 awk 确定为一个编程语言会让一些人望而却步。如果你是其中之一,请将 awk 考虑成一个解决问题的不同办法,通过它你能更好的控制电脑。

sed 可以简单地看成是交互式编辑的另一面。sed 程序和手动应用编辑命令很接近。 sed 程序限制你只能使用在文本编辑器中的方法。 awk 提供了一个更通用的处理文件的计算模型。

awk 程序的一个典型例子是将数据转换成格式化报告。这个数据可能是被一个 UNIX 程序如 UUCP 产生的日志文件,然后这个报告可能以一个对系统管理员有用的格式总结数据。另外一个例子是一个数据处理程序,包含独立的数据输入和数据检索程序。数据输入是以结构化的方式录入数据,数据检索是从文件提取数据和产生报告的过程。

所有这些操作的关键是数据有某种结构。让我们用衣柜打比方。一个衣柜包含了多个抽屉,每个抽屉有特定的内容。袜子在一个抽屉,内衣在另一个抽屉,毛衣在第三个抽屉,有时抽屉还有小隔间,允许不同的东西存在一起。这些是决定东西往哪里去(当你整理衣服时)和在哪里能被找到(当你穿衣服时)的所有结构。Awk 允许你使用文本文件的结构来编写将东西存入和取出的程序。

因此,当数据有某种结构时, awk 的好处才会最大体现出来。一个文本文件能松散或紧密的结构化。一大章包含了有某种结构的主要的和次要的小章节。我们将学习一个脚本提取章节头,将它们编号来产生一个大纲。一个由多列中以 tab 分离的项的表格可能被认为非常结构化。你可以使用一个 awk 脚本来渲染数据列,甚至将列变成行,行变成列。

就像 sed 脚本, awk 脚本通常也通过一个 shell 包裹器来调用。这是一个脚本程序,通常包含调用 awk 和 awk 解释的脚本的命令行。简单的一行 awk 脚本,可以从命令行输入。

awk 允许你做的一些事情如下:

  • 将一个文本文件视作由记录和字段组成的文本化数据库。

  • 使用变量来操作数据库。

  • 使用算术和字符串运算符。

  • 使用常见的编程结构,如循环和条件。

  • 产生格式化报告。

  • 定义函数。

  • 从脚本执行 UNIX 命令。

  • 处理 UNIX 命令的结果。

  • 更优雅地处理命令行参数。

  • 更方便的与多个输入流进行交互。

因为这些特征,awk 有用户可能依赖的能力和范围来完成那些被 shell 脚本执行的任务。在本书中,你将看到几个例子:一个基于目录的命令产生器,一个交互式的拼写检查器,一个索引处理程序。所有这些都使用了上面提到的特征。

awk 很强大,将文本编辑的思想延伸到计算中,使得执行许多数据处理任务,包括分析、提取数据报告成为可能。这些确实是最常见的 awk 应用,但还有很多不常见的应用:awk 一直被用来写一个 Lisp 解释器,甚至一个编译器!

本文章首发在 LearnKu.com 网站上。

上一篇 下一篇
讨论数量: 0
发起讨论 查看所有版本


暂无话题~