2/15(awk、awk的条件、awk处理设计可以执行额外任务、使用awk数组+for循环实现高级搜索)

awk

1,前置指令 | awk 选项 条件 指令
2,awk 选项 条件 指令 被处理文档
选项 -F 定义分隔符
指令 print
条件 /字符串/
内置变量 $1第一列 $2第二列 $3第三列 …
$0 所有列 NR行号 NF 列号

[root@proxy opt]# cat abc.txt #准备素材
hello the world
welcome to beijing

awk ‘{print}’ abc.txt #输出所有
awk ‘/to/{print}’ abc.txt #输出有to的那行
awk ‘{print $2}’ abc.txt #输出所有行的第2列
awk ‘/to/{print $1}’ abc.txt #输出有to的那行的第1列
awk ‘{print $0}’ abc.txt #输出所有行所有列
awk ‘{print $0,$1}’ abc.txt #输出所有行所有列,第1列
awk ‘{print NR}’ abc.txt #输出所有行的行号
awk ‘{print NR,$0}’ abc.txt #输出所有行的行号,所有列
awk ‘{print NR,NF}’ abc.txt #输出所有行的行号,列号(有几列)

awk ‘/^bin/{print NR}’ user #找以bin开头的行,显示该行的行号
awk ‘/^bin/{print NR,$0}’ user #找以bin开头的行,显示该行的行号,所有列
awk ‘{print NF}’ user #输出所有行的列号(每行有几列)
awk -F: ‘{print $1}’ user #文档中如果没有空格,可以用F修改分隔符
awk -F: ‘{print $1,$6}’ user #使用冒号作为列的分隔符,显示第1、6列
awk -F: ‘{print $1" 的家目录是 "$6}’ user #还可以输出常量,加双引号即可
awk -F: ‘{print $1" 的解释器是 "$7}’ user

收集根分区剩余容量
df -h | awk ‘//$/{print KaTeX parse error: Expected 'EOF', got '}' at position 2: 4}̲' #使用df -h …/{print “根分区剩余容量是”$4}’ #然后加常量输出

收集网卡流量信息
ifconfig eth0 | awk ‘/RX p/{print “eth0网卡接收的数据量是”$5"字节"}’
ifconfig eth0 | awk ‘/TX p/{print “eth0网卡发送的数据量是”$5"字节"}’

awk的条件

1./字符串/ 还可以使用正则 ~ 包含 !~不包含
awk -F: ‘$6~/root/{print}’ user #输出第6列包含root的行
awk -F: ‘$6~/bin/{print}’ user #输出第6列包含bin的行
awk -F: ‘$6!~/bin/{print}’ user #输出第6列不包含bin的行

2.使用数字或者字符串
== != > >= < <=
awk -F: ‘$3<3{print}’ user #输出第3列小于3的行
awk -F: ‘$3<=3{print}’ user #输出第3列小于等于3的行
awk -F: ‘NR==2{print}’ user #输出第2行
awk -F: ‘NR>2{print}’ user #输出行号大于2的行

awk处理时机,可以执行额外任务

BEGIN任务 执行1次,读取文档之前执行
逐行任务 执行n次,读取文档时执行
END任务 执行1次,读取文档之后执行

利用awk处理时机,输出下列内容
在这里插入图片描述
在这里插入图片描述
awk ‘BEGIN{print “User\tUID\tHome”}’ #第1步输出表头信息
awk -F: ‘{print $1"\t"$3"\t"$6}’ user #第2步输出内容
awk ‘END{print “总计"NR"行” }’ user #第3步输出结尾

awk -F: ‘BEGIN{print “User\tUID\tHome”}{print $1"\t"$3"\t"$6}END{print “总计"NR"行”}’ user #合在一起写

使用awk数组+for循环实现高级搜索

数组名[下标]=下标对应的值
for(变量名 in 数组名){print 变量名} #这个格式可以查看数组的所有下标
/var/log/httpd/access_log 查看访问网站日志的记录
在这里插入图片描述
awk ‘{a[$1]++}END{for(i in a){print i,a[i]}}’ shu.txt #使用逐行任务与数组收集文档shu.txt中的信息,然后在END任务中使用for循环显示所有数组a的下标与值

-n是以数字形式排序,-r是降序, -k是指定为第几列排序
awk ‘{ip[$1]++}END{for(i in ip){print i,ip[i]}}’ /var/log/httpd/access_log | sort -nr -k 2 #使用sort命令增加排序功能,-n是以数字形式排序,-r是降序, -k是指定为第几列排序

/var/log/secure是安全日志,如果有人登陆时输入错误密码的话
信息会记录下来,这种信息可以用awk抓取出来,方法如下:

在这里插入图片描述
统计安全日志中访问root账户密码输入错误的ip地址与次数

编写脚本,可以查看系统的各种参数信息
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值