shell脚本三剑客之AWK

引言

awk是功能强大的编辑工具它是专门为文本处理设计的编程语言,也是处理软件,通常用于扫描、过滤、统计汇总工作,数据可以来自标准输入也可以是管道或文件。grep,sed,awk 更是Shell 编程中经常用到的文本处理工具, 被称之为Shell 编程三剑客。

一、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.打印总行数
在这里插入图片描述
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的整行
在这里插入图片描述
6.打印第一列除以7取余等于0且第一列包含7的行
在这里插入图片描述
7.分开显示俩个文件的行号,NR会按顺序显示俩个文本的行号,不会重新计算

[root@localhost ~]# awk '{print NR,$0}' zz  /etc/passwd 

8.每碰到一次 " : " 就换行继续显示

[root@localhost ~]# awk 'BEGIN{RS=":"}{print $0}' zz

9.把多行合并为一行,输出时以空格分隔每行,可自定义

在这里插入图片描述

2.4 awk 的高级用法

awk -v b=“KaTeX parse error: Expected ‘EOF’, got ‘#’ at position 21: …EGIN{print b}’ #̲#将系统的变量a,在awk里赋…a’”}’ ##直接调用需要先用双引号再用单引号
awk -vc=1 ‘BEGIN{print c}’ ##awk直接定义并引用
在这里插入图片描述
1.调用函数getline,读取一行数据的时候并不是得到当前行而是当前行的下一行
在这里插入图片描述
2.打印第三列小于10的整行
在这里插入图片描述
3.第三列小于10,打印第二列,否则打印第五列

在这里插入图片描述
awk还支持for循环,while循环,函数,数组等

awk ‘BEGIN{x=0};//bin/bash$/ {x++;print x,$0};END {print x}’ /etc/passwd

x=0是定义变量,//bin/bash$/ 是以 /bin/bash 结尾的行,x++ 每次循环加 1,print x,$0,打印每次循环的 x 值和整行内容,END 结束操作 最后的 print x 表示统计一共有多少满足条件的行或者进行了多少次循环

1.统计以/bin/bash结尾的有多少行
在这里插入图片描述

2.5三元运算符

$3>$4) ?$3:$4三元运算符,如果第三个列的值大于第四列的值,则把第三列赋值给max,否则将第四列赋值给max
在这里插入图片描述
1.第一列包含root且列数等于7,打印整行内容
在这里插入图片描述

通过管道、双引号调用shell命令

echo $PATH| awk ‘BEGIN{RS=":"};END {print NR}’

echo $PATH| awk ‘BEGIN{RS=":"};{print NR,$0};END {print NR}’

在这里插入图片描述
内存
查看当前内存使用百分比
free -m | awk ‘/Mem:/{print int($3/($3+$4)*100)“%”}’

free -m | awk '/Mem:/{print $3/$2}'0.327869

free -m | awk '/Mem:/{print $3/$2*100}'32.7869

free -m | awk '/Mem:/{print $3/$2*100}'32

free -m | awk ‘/Mem:/{print $3/$2*100}’

free -m | awk '/Mem:/{print int($3/$2*100)“%”}'32
在这里插入图片描述

[root@localhost ~]# free -m | awk '/Mem:/{print $3/$2*100}' |awk -F. '{print $1 "%"}'
18%

在这里插入图片描述
查看当前CPU空闲率,(-b -n 1表示只需要1此的输出结果)
在这里插入图片描述

[root@localhost ~]# echo "A B C D" | awk '{OFS="|";print $0;$1=$1;print $0}'
A B C D
A|B|C|D

在这里插入图片描述

三、总结

1.AWK工具简介
2.AWK命令的使用方法

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值