第 6 章 GNU AWK编程语言

目录

6.1. gawk上路
6.1.1. 什么是gawk?
6.1.2. Gawk命令
6.2. 打印程序
6.2.1. 打印选择的域
6.2.2. 格式化域
6.2.3. print命令和正则表达式
6.2.4. 特殊的patterns
6.2.5. Gawk脚本
6.3. Gawk变量
6.3.1. 输入域的分隔符
6.3.2. 输出分隔符
6.3.3. 记录的数量
6.3.4. 用户定义的变量
6.3.5. 更多例子
6.3.6. printf程序
6.4. 总结
6.5. 练习

摘要

本章我们会讨论:

  • 什么是 gawk

  • 在命令行中使用 gawk 命令

  • 怎么使用 gawk 来格式化文本

  • gawk 怎么使用则正则表达式

  • 脚本中的 gawk

  • gawk 和变量

[注意] 把它变得更有趣味

就像sed一样,整本书写了多个版本的awk。这个介绍远还不够完整,且只是为了能够理解在后面章节中的例子。要得到更多的信息,最好是从 GNU awk 的随附文档开始:“GAWK: Effective AWK Programming: A User's Guide for GNU Awk”.

6.1. gawk上路

6.1.1. 什么是gawk?

Gawk 是通常在UNIX系统下使用的另外一个流行的流编辑器 awk 的GNU版本。尽管 awk 程序常常只是一个 gawk 的连接,但是我们还是称作它为 awk

awk 的最基本的作用是搜索含有1个或者多个模板的文件中的行或者其他文本块。当一行符合搜索的patterns,在该行就会实现指定的动作。

awk 中的程序和许多其他语言中的程序是不一样的,因为 awk 程序是 “数据驱动的” :你先描述你想处理的数据,然后当找到它们的时候怎么处理。许多其他的语言是“过程的”。你需要具体的描述程序该采取的措施。当使用过程化的语言时,通常更难清楚地描述你需要处理的数据。正因为如此, awk 程序经常能清爽容易地读写。

6.1.2. Gawk命令

当你运行 awk 的时候,你指定一个 awk 程序 来通知 awk 该如何做。程序由一系列 规则 组成。(也可能包含函数定义,循环,条件和其他程序结构,高级特性等一系列我们已经遗忘的东西。)每个规则指定了搜索的模板和在搜索到一个模板后执行的动作。

有几种运行 awk 的方法。如果程序很短,最方便的是在命令行运行它:

awk PROGRAM inputfile(s)

在已经完成的多个改变,通常在多个文件,很方便把 awk 命令放到脚本当中,读起来像这样:

awk -f PROGRAM-FILE inputfile(s)