ITEEDU

第 6 章 GNU AWK编程语言

摘要

本章我们会讨论:

  • 什么是 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)