文本三剑客之awk

99 阅读2分钟

awk的工作原理

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

awk的命令格式

awk 选项 '模式或条件 [操作]' 文件1 文件2 ...

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

awk常见的内建变量

FS:列分隔符。指定每行文本的字段分隔符,默认为空格或制表位,与”-F“作用相同
NF:当前处理的行的字段个数
NR:当前处理的行的行号(序数)
$0:当前处理的行的整行内容
$n:当前处理行的第n个字段(第n列)(最后一个字段$NF)
FILENAME:被处理的文件名
RS:行分隔符。awk从文件上读取资料时,将根据RS的定义把资料切割成许多条记录,而awk一次仅读入一条记录,以进行处理,预设值是'\n'
$0 在shell主代码中代表的是脚本名

在函数中代码的是函数名

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

awk '{print }' awk '{print $0}' image.png awk "{print $0}" image.png awk '{print NR,$0}' image.png awk 'NR==1,NR==2 {print $0}' image.png awk '(NR>=1)&&(NR<=3) {print $0}' image.png awk '(NR%2)==1 {print $0}' image.png awk '(NR%2)==0 {print $0}' image.png ifconfig ens33| awk 'NR==2 {print $2}' image.png

 BEGIN模式

格式

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

模式
BEGIN {操作1}   awk 在读取文件之前执行的操作
[条件] {操作2}  awk 逐行读取文件时执行的操作
END {操作3}     awk  在处理文件所有行之后执行的操作
awk 'BEGIN {x=0};\/bin\/bash$/{x++};END {print x}' /etc/passwd

统计以bash结尾的行

image.png

使用-F 指定分隔符

image.png

打印UID大于500的用户

  • 要求打印用户名和UID
  • !表示取反,不大于500,即小于等于500. image.png

image.png

三元运算符

(条件表达式)?(A表达式或者值):(B表达式或者值) image.png

$NF、$n~、$n!~、$n==、$n!=

image.png

image.png

image.png

image.png

统计行数

image.png

image.png

image.png

内存的使用率

image.png

过滤cpu空闲率

image.png

指定输出时的列分搁符

image.png

image.png

image.png