Linux三剑客-awk

Linux三剑客-awk

1、四剑客对比

四剑客特点擅长
find查找文件查找文件,与其他命令配合
grep/egrep过滤过滤速度最快
sed过滤,取行,替换,删除替换,修改文件内容,取行
awk过滤,取行,取列,统计计算,判断,循环取列,取行,统计计算

2、命令格式

awk 选项 ‘条件{动作}’ /etc/passwd

条件 找谁

动作 干啥

3、执行流程

image-20221229201411056

4、常见的选项及说明

参数选项说明
-F指定字段分隔符 默认是空格
-v定义或修改一个awk内部的变量

5、常见的变量及属性

变量属性
$0当前整行记录
$n记录第n列
NF列的个数,包含多少列 $NF就是最后一列
$(NF-n)第NF-n列,例NF=7 n=1 就是第6例
NR行的符号
END{}内容会在awk读取完成文件的时候执行,一般用于输出执行结果

6、支持的运算符号

运算符说明
==等于
!=不等于
>大于
>=大于等于
<小于
<=小于等于
&&并且 and符
||或者
~包含

7、取行案例

7.1 取出/etc/passwd的第三行

awk 'NR==3' /etc/passwd
相当于
awk 'NR==3{print $0}' /etc/passwd  #打印当前行可不写

7.2 取出第二行到第五行的内容

awk 'NR>=2 && NR<=5' /etc/passwd

7.3 过滤包含root和nobody的行

awk '/root|nobody/' /etc/passwd

7.4 过滤从root到nobody的行

awk '/root/,/nobody/' /etc/passwd

8、取列案例

8.1 取出ls -lh的大小列和最后一列

ls -lh|awk '{print $5,$NF}'

输出结果对齐可使用以下参数
ls -lh|awk '{print $5,$NF}'|column -t
or
ls -lh|awk '{print $5"\t"$NF}'

8.2 取出/etc/passwd中的第 1列,第3列和最后一列

awk -F ":" '{print $1,$3,$NF}' /etc/passwd

-F   #awk默认以空格为分隔符,除了空格之外需使用-F手动指定分隔符

8.3 指定复杂分隔符取出ip

ip a s eth0|awk 'NR==3'|awk -F'[ /]+' '{print $3}'

#当不满足一个符号为分隔符时,可以使用[]配合正则指定多个分隔符,不过此时需要注意列数就变了

9、取行和取列案例

9.1 取出权限部分 stat /etc/hosts的0644部分

stat /etc/hosts|awk -F "[(/]" 'NR==4{print $2}'
or
stat /etc/hosts|awk -F "[^0-9]+" 'NR==4{print $2}'    #^放到[]里面代表取反,放到外面代表以...开头

9.2 使用一条awk命令取ip

ip a s eth0|awk -F "[ /]+" 'NR==3{print $3}'
or
ip a s eth0|awk -F "[inet /24]+" 'NR==3{print $2}'

9.3 取出/etc/passwd文件中 第3列大于大于100的行,取出这行的第1列,第3列和最后一列

awk -F ":" '$3>100{print $1,$3,$NF}' /etc/passwd

9.4 如果系统swap使用超过0则输出"监控异常 系统开始占用swap"

free |awk 'NR==3 && $3>=0{print "监控异常,系统开始占用swap"}'
or
free |awk '/Swap/ && $3>=0{print "监控异常,系统开始占用swap"}'

9.5 过滤出/etc/passwd第4列的数字是以0或1开头的行,输出第1列,第3列,第4列

awk -F ":" '$4 ~ /^[01]/{print $1,$3,$4}' /etc/passwd

10、awk统计与计算

10.1 统计次数

awk '{i=i+1}END{print i}' /etc/passwd   #统计这个文件总共有多少行

可以简写为
i=i+1 ==i++

10.2 计算求和

awk -F ":" 'NR<=3{num=num+$3}END{print num}' /etc/passwd   #取前三行第三列的的总和,$n代表第n列
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值