Shell 第六章awk

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命令对于脚本编写也有很大的操作空间,

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值