【shell】shell脚本实战-awk使用案例
2021-04-10 22:07
1036 查看
文章目录
- [ul]1. 打印特定字段
- 2. NF, 字段数量
- 3. 计算和打印
- 4. 打印行号
- 5. 在输出中添加内容
- 6. 自定义格式输出
- 1. 使用NR行号来定位提取IP
- 2. 去除首行
- 3. 其他使用
- 4. 检查服务器是否受到DDOS***的脚本
- 总结
1. 使用NR行号来定位提取IP
[root@ecs-c13b awk]# ifconfig eth0 |awk -F " " 'NR==2{print $2}'192.168.0.192
2. 去除首行
[root@ecs-c13b awk]# route -nKernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 0.0.0.0 192.168.0.1 0.0.0.0 UG 100 0 0 eth0 169.254.169.254 192.168.0.1 255.255.255.255 UGH 100 0 0 eth0 192.168.0.0 0.0.0.0 255.255.255.0 U 100 0 0 eth0
方法一:
[root@ecs-c13b awk]# route -n |grep -v ^KernelDestination Gateway Genmask Flags Metric Ref Use Iface 0.0.0.0 192.168.0.1 0.0.0.0 UG 100 0 0 eth0 169.254.169.254 192.168.0.1 255.255.255.255 UGH 100 0 0 eth0 192.168.0.0 0.0.0.0 255.255.255.0 U 100 0 0 eth0[root@ecs-c13b awk]#
方法二:
[root@ecs-c13b awk]# route -n |sed 1dDestination Gateway Genmask Flags Metric Ref Use Iface 0.0.0.0 192.168.0.1 0.0.0.0 UG 100 0 0 eth0 169.254.169.254 192.168.0.1 255.255.255.255 UGH 100 0 0 eth0 192.168.0.0 0.0.0.0 255.255.255.0 U 100 0 0 eth0[root@ecs-c13b awk]#
方法三:
[root@ecs-c13b awk]# route -n |awk 'NR!=1 {print $0}'Destination Gateway Genmask Flags Metric Ref Use Iface 0.0.0.0 192.168.0.1 0.0.0.0 UG 100 0 0 eth0 169.254.169.254 192.168.0.1 255.255.255.255 UGH 100 0 0 eth0 192.168.0.0 0.0.0.0 255.255.255.0 U 100 0 0 eth0[root@ecs-c13b awk]#
3. 其他使用
创建练习文件:
[root@ mysql-master ~]# vim data.txtBeth 4.00 0 Dan 3.75 0 kathy 4.00 10 Mark 5.00 20 Mary 5.50 22 Susie 4.25 18
1. 打印特定字段
[root@ mysql-master ~]# awk '{print $1,$3}' data.txtBeth 0 Dan 0 kathy 10 Mark 20 Mary 22 Susie 18
在 print 语句中被逗号分割的表达式, 在默认情况下他们将会用一个空格分割 来输出. 每一行 print 生成的内容都会以一个换行符作为结束. 但这些默认行 为都可以自定义。
2. NF, 字段数量
依次打印出每一行的字段数量, 第一个字段的值, 最后一个字段的值:
[root@ mysql-master ~]# awk '{print NF, $1, $NF}' data.txt3 Beth 0 3 Dan 0 3 kathy 10 3 Mark 20 3 Mary 22 3 Susie 18
3. 计算和打印
[root@ mysql-master ~]# awk '{print $1, $2 * $3}' data.txtBeth 0 Dan 0 kathy 40 Mark 100 Mary 121 Susie 76.5
4. 打印行号
Awk提供了另一个内建变量, 叫做 NR, 它会存储当前已经读取了多少行的计数. 我们可以使用 NR 和 $0 给 emp.data 的每一行加上行号:
[root@ mysql-master ~]# awk '{print NR,$0}' data.txt1 Beth 4.00 0 2 Dan 3.75 0 3 kathy 4.00 10 4 Mark 5.00 20 5 Mary 5.50 22 6 Susie 4.25 18
5. 在输出中添加内容
当然也可以在字段中间或者计算的值中间打印输出想要的内容:
[root@ mysql-master ~]# awk '{print "total pay for", $1, "is", $2 * $3}' data.txttotal pay for Beth is 0 total pay for Dan is 0 total pay for kathy is 40 total pay for Mark is 100 total pay for Mary is 121 total pay for Susie is 76.5
6. 自定义格式输出
第1列使用15个字符宽度左对齐输出,最后一列使用15个字符宽度右对齐输出
[root@ecs-c13b awk]# awk -F: '{printf "USERNAME:%-15s %15s\n",$1,$NF}' /etc/passwdUSERNAME:root /bin/bash USERNAME:bin /sbin/nologin USERNAME:daemon /sbin/nologin
4. 检查服务器是否受到DDOS***的脚本
[root@ecs-c13b awk]# netstat -ntu |awk '{print$5}'|cut -d: -f1 |uniq -c |sort -n 1 100.125.1.41 1 114.181.58.197 1 120.245.114.128 1 45.79.47.198 1 Address 1 servers)
总结
awk的内容还远远未完,还需要大量的练习。sed,grep,awk,用之前都需要花一些精力把语法搞明白。
后面我会做个思维导图来梳理下这三个内容,帮助大家记忆。
相关文章推荐
- Shell脚本------解析elf文件及awk基本使用
- shell脚本之使用sed和awk进行文本处理
- shell脚本--使用for if date awk
- Linux系统shell脚本编程——生产实战案例
- shell (awk)数组使用案例
- Shell脚本-使用awk实现取自定义参数值
- 采用Shell及AWK脚本实现磁盘使用空间监控
- shell脚本之xargs使用的一些案例
- 在Shell脚本中编写AWK脚本实现数据提取—注意格式、awk中使用shell变量、awk中数字字符串转换成数字、awk中字符串相等比较
- 详解shell脚本中的case条件语句介绍和使用案例
- shell脚本之awk工具的使用
- sed 、awk 项目中的shell脚本使用
- shell脚本之awk的简单使用
- shell脚本自动化部署XX的案例(附数组使用)
- 使用shell脚本ssh远程执行命令,使用awk时总是报错
- Shell脚本编程与sed,awk工具的使用--9月15日课程作业
- Linux系统shell脚本编程——生产实战案例(批量检查在线IP与开放端口)
- shell脚本-awk使用
- Linux 下使用shell脚本定时维护数据库的案例
- shell脚本--cut命令与awk简单使用