> 文档中心 > shell脚本三剑客之AWK

shell脚本三剑客之AWK

一、AWK工具介绍
AWK是一种处理文本文件的语言,是一个强大的文本分析工具。

它是专门为文本处理设计的编程语言,也适行处理软件,通常用于扫描、过滤、统计汇总工作

数据可以来自标准输入也可以是管道或文件

1.AWK 是一种处理文本文件的语言,是一个强大的文本分析工具

2.可以在无交互的模式下实现复杂的文本操作

3.相较于 sed 常作用于一整个行的处理,awk 则比较倾向于一行当中分成数个字段来处理,因为awk相当适合小型的文本数据

1.1 AWK 命令的格式

awk [选项] ‘模式条件{操作}’ 文件1 文件2...awk -f|-v 脚本文件 文件1 文件.....格式:awk 关键字  选项  命令部分  '{xxxxx}'  文件名

1.2 AWK 工作原理
当读到第一行时,匹配条件,然后执行指定动作,再接着读取第二行数据处理,不会默认输出
如果没有定义匹配条件默认是匹配所有数据行,awk隐含循环,条件匹配多少次动作就会执行多少次

逐行读取文本,默认以 空格 或 tab键 为分隔符进行分隔,将分隔所得的各个字段保存到内建变量中,并按模式或者条件执行编辑命令。
sed 命令常用于一整行的处理,而 awk 比较倾向于将一行分成多个 “字段” 然后再进行处理。
awk信息的读入也是逐行读取的,执行结果可以通过 print 的功能将字段数据打印显示。
在使用awk命令的过程中,可以使用逻辑操作符 “$” 表示"与"、" | | " 表示 “或”、" !“表示非”,还可以进行简单的数学运算,如+、-、*、/、%、^分别表示加、减、乘、除、取余和乘方
1.3 常见的内建变量

FS:指定每行文本的字段分隔符,默认为空格或制表位。NF:当前处理的行的字段个数。NR:当前处理的行的行号(序数)。$0:当前处理的行的整行内容。$n:当前处理行的第n个字段(第n列)。FILENAME:被处理的文件名。RS∶ 行分隔符。awk从文件上读取资料时,将根据RS的定义把资料切割成许多条记录,而awk一次仅读入一条记录,以进行处理。预设值是’\n’。

二、AWK 命令的使用
2.1打印文本内容
1.打印 zz 文件内容
在这里插入图片描述
awk 默认把这一行都看成一列,因为没有被空格分隔,awk默认以 空格 或 tab键 分隔在这里插入图片描述
自定义冒号为分隔符显示分隔之后的第五列
在这里插入图片描述
用 x 作分隔符
在这里插入图片描述
显示一个空格,空格需要用双引号引起来,如果不用引号默认以变量看待,如果是常量就需要双引号引起来,逗号也有空格效果
在这里插入图片描述
2.2 根据$n提取字段
$n,代表提取第几列

awk常用内置变量:$1、$2、NF、NR、$0$1:代长第一列s2:代表第二列以此类推s0:代表整行NE:一行的列数NR:行数

示例:
1.打印包含root的整行内容在这里插入图片描述
2.打印包含root的行的第一列
在这里插入图片描述
3.打印包含root的行的第一列和第六列
在这里插入图片描述
4.打印每一行的列数
在这里插入图片描述
5.显示行号
在这里插入图片描述
在这里插入图片描述
7.打印整行,并显示行号
在这里插入图片描述
8.打印第二行,不加print也一样,默认就是打印在这里插入图片描述
9.打印第二行的第一列在这里插入图片描述
10.打印总行数
shell脚本三剑客之AWK
11.打印文件最后一行
在这里插入图片描述
12.打印
当前行有几列
第几行有几列
在这里插入图片描述
网卡的IP,流量
在这里插入图片描述
根分区的可用量
在这里插入图片描述
逐行执行开始之前执行什么任务,结束之后再执行什么任务,用BEGIN、END

BEGIN一般用来做初始化操作,仅在读取数据记录之前执行一次

END一般用来做汇总操作,仅在读取完数据记录之后执行一次

2.3 awk 的运算
模糊匹配,用 ~ 表示包含,!~ 表示不包含
awk -F: ‘$1~/ro/{pring $2}’ zz ##打印第一列包含ro的行的第二列,以 " : " 分隔
awk -F: ‘$1!~/ro/{pring $2}’ zz ##打印第一列不包含ro的行的第二列,以 " : " 分隔
在这里插入图片描述
1.打印第一列等于 root 的行
在这里插入图片描述
2.打印第三列大于等于1000的行在这里插入图片描述
3.打印第三列小于10,或者第三列大于1000的行
在这里插入图片描述
4.打印第三列大于10并且小于20的行在这里插入图片描述
5.打印行号大于1小于10的整行
![在这里插入图片描述](https://img-

手机爆料