awk
引言:sed命令常用于一整行的处理,而awk比较倾向于将一行分成多个""字段"然后再进行处理。.awk信息的读入也是逐行读取的,执行结果可以通过print的功能将字段数据打印显示。
一、awk
1.awk概述
AWK是一种处理文本文件的语言,是一个强大的文本分析工具,它是专门为文本处理设计的编程语言,也是行处理软件,通常用于扫描、过滤、统计汇总工作,是一款功能强大的编辑工具,是在无交互的情况下实现复杂的文本操作,
2.awk工作原理
当读到第一行时,匹配条件,然后执行指定动作,再接着读取第二行数据处理,不会默认输出;如果没有定义匹配条件默认是匹配所有数据行,awk隐含循环,条件哦i哦欸多少次动作就会执行多少次
逐行读取文本,默认以空格或tab键位分隔符进行分隔,将分隔所得的各个字段保存到内建变量中,并按模式或者条件执行编辑命令
sed命令常用于一整行的处理,而awk比较倾向于将一行分成多个"字段",然后再进行处理,awk信息的读入也是逐行读取的,执行结果可以通过print的功能将字段数据打印显示,再使用awk命令的过程中,可以使用逻辑操作符"&&“表示"与”、“||“表示"或”、”!“表示"非”;还可以进行简单的数学运算,如+、-、*、/、&,分别表示加、减、乘、除、取余和乘方
3.awk命令
3.1awk命令格式
命令格式:
awk选项'模式或条件[操作]'文件1或文件2
awk 选项 '模式条件 [操作]' 文件1 文件2 …
awk -f 脚本文件 文件1 文件2 …
格式:awk关键字 选项 命令部分 '[xxxx]' 文件名
awk:包含几个特殊的内建变量(可直接用)如下所示:
FS:指定每行文本的字段分隔符,默认为空格或制表位
NF:当前处理的行的字段个数
NR:当前处理的行的行号(序数)
$0:当前处理的行的整行内容
$n:当前处理行的第n个字段(第n列)
FILENAME:被处理的文件名
RS:行分隔符,awk从文件上读取资料时,将根据Rs的定义把资料切割成许多记录,而awk一次仅读入一条记录,以进行处理。预设值是"\n",
简述:数据记录分隔,默认为\n,即每行为一条记录
3.2awk内置变量的用法
FS:字段分隔符,默认是空格;输入字段的分隔符;默认是空格
OFS:输出字段的分隔符,默认也是空格
NR:当前处理的行的行号(序数)
FNR:读取文件的记录数(行号);从1开始;新的文件重新从1开始计数
RS:输入行的分隔符,默认为换行符
ORS:输出行的分隔符,默认也是换行符
NF:当前处理的行的字段个数
$0:当前处理的行的整行内容
$n:当前处理行的第n个字段(第n列)
4.awk案例
4.1打印包含root的指定列内容
":"作为分隔
4.2以某个字符作为分隔,打印第几列
以x作为分隔符,打印
以":“和”/"都可以作为分隔符打印
4.3制表符
4.4显示打印满足条件的整行或整列内容
打印包含root整行内容
打印包含root整列内容
4.5打印满足条件的行号
4.6同时显示满足条件的行号与内容
4.7打印指定行,
4.8打印指定行和指定列
4.9显示总行号(最后一行的行号)
4.10 显示最后一行行号和全部内容
4.11显示行号和列号
4.12输入字段分隔符为":"
4.13输出字段分隔符为—
4.14以":作为输入分隔符","—"作为输出分隔符
4.15FNR开启新的文件依旧会从1开始计算行号
思考
本机IP地址打印
监控流量告警
磁盘空间监控
二、BEGIN
将内容划分成不同的模块,逐行开始执行任务,结束之后再执行,使用BEGIN、END,其中
BEGIN一般用来做初始化的操作,仅在读取数据记录之前执行依次
END一般用来做汇总操作,尽在读取数据记录之后执行一次
2.1awk的运算
定义不同变量输出
awk 'BEGIN{a=10;print a}' 如果不用引号awk就当作一个变量来输出了,所以不需要加$
awk 'BEGIN{a=10;print a+1}' BEGIN在处理文件之前,所以后面不跟文件名也不影响
awk 'BEGIN{a=10;a++;print a}'
awk 'BEGIN{print x+1}' 不指定初始值,初始值就为0,如果是字符串,则默认为空
awk 'BEGIN{print 2.5+3.5}' 小数也可以进行运算
awk 'BEGIN{print 3*4}'
awk 'BEGIN{print 3**4}'
awk 'BEGIN{print 3^4}'
**和^都是幂运算
2.2以":"为换行符
2.3加上[]表示,以"😕"作为分隔符,并显示该行所有内容
2.4输出空格做分隔符
3.模糊匹配
用表示包含,!表示不包含
第一列包含指定字符的行
awk -F: '$1~/root/' zz 包含root字符的行
awk -F: '$1~/ro/' zz 第一列只要包含ro的行
awk -F: '$1=="root"' passwd 精确搜索
awk -F: '$1==root' passwd 模糊搜索
4.数值比较
4.1打印结尾不为某段字符
打印指定行号
4.2打印5-11行
4.3第三列大于等于1000的行
5.逻辑运算&& ||
5.1第三列行号大于等于1000或小于等于10的行
5.2第三列大于10且小于等于1000的行
5.3整除7,然后包含7 的数
总结
awk命令信息读入是逐行读取的,执行结果可以通过print的功能将字段数据打印显示,在使用awk命令的过程中,可以使用逻辑操作符"&&“表示"与”、“||“表示"或”、”!“表示"非”,还可以进行简单的数学运算,如+、-、*、/、%、^分别表示加、减、乘、除、取余和乘方,利用awk命令对于脚本编写也有很大的操作空间,