文本工具三剑客之 awk 详解 !!

217 阅读2分钟

1、引言

AWK 是一个功能强大的文本和数据处理工具,数据可以来自一个或多个文件,也可以为其他命令的输出结果,常作为脚本使用。

2、工作原理

逐行读取文本,默认以空格或制表符为分隔符进行分隔,将分隔所得的各个字段保存到内建变量中,对比该行是否与给定的模式相匹配,并按模式或者条件执行编辑命令。

3、命令格式

awk 【选项】'模式或条件{编辑命令}' 文件1 文件2

awk -f 脚本文件 文件1 文件2

4、常见的内置变量

变量描述
FS列分隔符:指定每行文本的字段分隔符,缺省为空格或者制表位
NF当前处理行的字段个数
NR当前处理行的行号(序数)
$0当前处理行的整行内容
$n当前处理行的第n个字段(第n列)
FILENAME被处理的文件名
RS行分隔符:将数据切割成许多条记录,一次只读入1条记录,以进行处理。预设值"\n"

5、awk的用法示例

5.1、按行输出文本内容

3.jpg

5.1.1、$0的使用

1.jpg

5.1.2、打印区间行内容

2.jpg

在使用Awk的过程中,可以使用关系运算符作为"条件",用于比较数字与字符串,比如大于(>),小于(<),大于等于(>=),小于等于(<=),等于(==),不等于(!=);也可以使用逻辑运算符&&、||、!还可以进行简单的数学运算加减乘除、取余、乘方。

4.jpg

5.1.3、打印奇偶行

6.jpg

5.1.4、过滤出 IP地址

5.jpg

5.1.5、"//" 过滤内容的行

7.jpg

5.1.6、"^" 以...开头的行

8.jpg

5.1.7、"$" 以...结尾的行

9.jpg

5.2、BEGIN、END模式

5.2.1、命令格式:

awk 'BEGIN{...}; {...}; END{...}' 文件

命令操作顺序如下 :
- awk处理文本前会先执行BEGIN{...}里的命令操作
- 然后再逐行进行中间{...}中的命令操作
- 直到中间命令操作处理完整个文本后,才会执行END{...}里的命令操作

5.2.2、示例:

10.jpg

11.jpg

5.3、按字段输出文本内容

5.3.1、输出行内某字段内容

1.jpg

2.jpg

3.jpg

4.jpg

6.jpg

5.3.2、过滤条件:三元运算符

5.jpg

5.4、管道符、双引号过滤条件

7.jpg

8.jpg

5.5、awk 数组的使用

5.5.1、数组下标为数字

9.jpg

5.5.2、数组下标为字符串

10.jpg

11.jpg

5.5.3、for循环遍历数组

12.jpg

5.5.4、for循环遍历数组 统计某字符串在文中出现的次数

12.jpg