前面我们讲过sed编辑器,虽然其是自动修改文本文件的非常方便的工具,但它也有自身的限制。通常你需要一个用来处理文件中的数据的更高级工具,它能提供一个类编程环境,允许修改和重新组织文件中的数据。这正是gawk的特点。
gawk程序是Unix中的原始awk程序的GNU版本。gawk程序让流编辑器迈上了一个新的台阶,它提供了一种编程语言而不只是编辑器命令。在gawk语言中,你可以做下面的事:
gawk程序的报告生成能力通常用来从大文本文件中提取数据元素并将它们格式化成可读的报告。最完美的例子是格式化日志文件。在日志文件中找出错误行会很难,gawk程序允许从日志文件中只过滤出你要看的数据元素,并以某种更容易读取重要数据的方式将它们格式化。
选项 含义
----------------------------------------------------------------------
-F fs 指定行中分隔数据字段的字段分隔符
-f file 指定要读取的程序文件名(program)
-v var=value 定义gawk程序中的一个变量及其默认值
-mf N 指定要处理的数据文件中的最大字段数
-mr N 指定数据文件中的最大数据行数
-w keyword 指定gawk的兼容模式或警告等级
gawk程序脚本用一对花括号来定义。你必须将脚本命令放到两个括号中。由于gawk命令行假定脚本是单个文本字符串,你必须将脚本放到单引号中。下面是个在命令行上指定简单的gawk程序脚本的例子:
跟sed编辑器一样,gawk程序会针对数据流中的每行文本执行一遍程序脚本。由于程序脚本被设置为显示固定的文本字符串,因而不管你在数据流中输入什么文本,你都会得到同样的文本输出。
gawk的基本特性之一是它处理文本文件中数据的能力。它会自动给每行中的每个数据元素分配一个变量。默认情况下,gawk会将如下变量分配给它在文本行中发现的每个数据字段:
每个数据字段在文本行中都是通过字段分隔符来划分的。gawk读取一行文本时,它会用预定义的字段分隔符来划分每个数据字段。gawk中默认的字段分隔符是任意的空白字符(例如空格或制表符)。