文本三剑客 awk命令

124 阅读1分钟

awk

工作原理:

逐行读取文本,默认以空格或tab键为分隔符进行分隔,将分隔所得的各个字段保存到内建变量中,并按模式或者条件执行编辑命令。

sed命令常用于一整行的处理,而awk比较倾向于将一行分成多个字段"然后再进行处理。avwk信息的读入也是逐 行读取的,执行结果可以通过print的功能将字数据打印显示。在使用awk命令的过程中,可以使用逻辑操作符" &&"表示"与、"| |"表示"或" 、"."表示"非":还可以进行简单的数学运算,如+、- 、*、/、%、^分别表示加、减、乘、除、取余和乘方。

命令格式:

awk 选项 ' 模式或条件 {操作} ’文件1 文件2 …

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

awk常见的内建变量(可直接用)如下所示:

FS:列分割符。指定每行文本的字段分隔符,默认为空格或制表位。与"-F"作用相同

NF:当前处理的行的字段个数。

NR:当前处理的行的行号(序数)。

$0:当前处理的行的整行内容。

$n:当前处理行的第n个字段(第n列)。

FILENAME:被处理的文件名。

RS:行分隔符。awk从文件上读取资料时,将根据Rs的定义把资料切割成许多条记录, 而awk一次仅读入一条记录,以进行处理。预设值是'\n'

$0: 在shell主代码中代表的是脚本名

在函数体中代码的是函数名

在awk的命令的代表的是当前整行内容

awk ' BEGIN {操作1}; [条件] {操作2}; END {操作3}' 文件x

BEGIN {操作1} awk在读取文件之前执行的操作

[条件] {操作2} awk逐行读取文件时执行的操作

END {操作3} awk在处理完文件所有行之后执行的操作

awk的基础用法

20220906144223.png

20220906144436.png

20220906144741.png

打印奇数行;打印偶数行。(将行号除以2取余数,余1是奇数行,余0是偶数行)

20220906144859.png

字符串匹配显示含字符的行

20220906145134.png

BEGIN模式

awk ' BEGIN {操作1}; [条件] {操作2}; END {操作3}' 文件x

BEGIN {操作1} awk在读取文件之前执行的操作

[条件] {操作2} awk逐行读取文件时执行的操作

END {操作3} awk在处理完文件所有行之后执行的操作

20220906145957.png

20220906150417.png

20220906150541.png

20220906151042.png

20220906151422.png

按字段(列)输出内容

20220906155332.png

匹配主机空闲内存

20220906160022.png

过滤ens33 ip地址 mac地址 入站流量 出站流量

20220906161512.png

打印//etc/passwd用户名和uuid

20220906162012.png

20220906161916.png

20220906162106.png

指定数值匹配 20220906162450.png

20220906162541.png

!进行反取 20220906162726.png

20220906162827.png

20220906163334.png

使用if语句

使用if语句时,内部条件要加( ),外面要加{ }。

将{ }整条语句当作一个操作命令,相当于嵌套。

20220906163736.png

三元运算符

20220906164713.png

$n~"xxx" 实现包含某个字符段的效果

$n=="XXX" 代表的是指定字段为某个字符串

$n!="XXX" 代表的是指定字段不为某个字符串

20220906165400.png

20220906165832.png

20220906170816.png

20220906171258.png

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

20220906180037.png

20220906180419.png

统计行数

20220906180950.png

输入内容到文件

20220906181354.png

算出当前内存的空闲率加上%

20220906182614.png

进程空闲率

20220906182914.png

20220906183656.png

20220906184109.png

日期时间

20220906190528.png

自动获取上一次开机时间

20220906191308.png