4.1.11 awk应用

4.1.11 awk应用

awk是一个用于处理文本的编程语言工具,能用简短的程序处理标准输入、文件、数据排序、计算以及报表等。在Linux操作系统下,默认awk是gawk,gawk是awk的GNU版本。可以通过命令查看应用的版本:ls -l/bin/awk。

awk的基本语法如下:

其中:pattern表示awk在数据中要查找的内容;action表示当找到匹配内容时所要执行的一系列命令;花括号用于根据特定的模式对一系列指令进行分组。awk采用的工作方式与数据库采用的工作方式类似,支持对记录和字段进行处理,这也是grep和sed所不能实现的。在awk中,默认情况下将文本文件中的一行视为一个记录,逐行放入内存中处理,而将一行中的某一部分作为记录的一个字段。采用1,2,3,…数字的方式顺序地表示行中的不同字段。在$后跟数字,引用对应的字段,以逗号分隔,0表示整行。awk常用选项的许多功能也非常强大,实际使用过程中可以通过查询相关帮助进行学习。awk常用选项及其说明如表4-7所示。

表4-7 awk常用选项及其说明

续表

在编程语言工具中,awk处理文本非常出色。awk文本详细案例如下。

1.从文件读取awk程序

我们通过-f指定的awk程序来处理文件,代码如下:

2.指定分隔符,打印指定字段

打印第二个字段,默认以空格分隔,代码如下:

3.指定冒号为分隔符

打印第一个字段,代码如下:

4.指定多个分隔符作为同一个分隔符处理

打印第二个字段,默认以空格分隔,代码如下:

5./re/正则匹配

匹配包含tcp的行,代码如下:

6.逻辑and、逻辑or和逻辑not

匹配记录中包含blp5和tcp的行,代码如下:

7.FS和OFS

在程序开始前重新赋值FS变量,改变默认分隔符为冒号,与-F一样,代码如下:

8.RS通过支持正则匹配分隔符

RS通过支持正则匹配分隔符,代码如下:

9.NF

NF作为每行字段个数,代码如下:

10.NR统计记录编号

每处理一行记录,编号就会加1。与FNR不同的是,NR在统计第二个文件时会重新计数,再打印行数。