AWK应用实例
这几天有点事比较忙,更新较慢;
awk的数组,以及正则表达式的引用,相对来讲只能多练;练的多了慢慢就理解了,今天打算磨合awk的应用,以便让自己迅速的理解awk各类语法的应用,能熟练套用、应用语法;
应用①
1 | awk -F" " '{print NF}' hei.sh # 输出文件每行有多少个字段 |
应用②
1 | awk -F'[:#]' '{print NF}' hei.sh # 指定多个分隔符"[:#]" 输出每行多少字段 |
应用③
1 | awk -F'[:#/]' '{print NF}' /etc/passwd # 指定三个分隔符,并输出每行字段数 |
应用④
计算/home目录下,普通文件的大小,使用KB作为单位
1 | ls -l|awk 'BEGIN{sum=0} !/^d/{sum +=$5}END{print "total size is:",sum/1024,"KB"}' |
通常,对于每个输入行, awk 都会执行每个脚本代码块一次。然而,在许多编程情况中,可能需要在 awk 开始处理输入文件中的文本之前执行初始化代码。对于这种情况, awk 允许您定义一个 BEGIN 块。
因为 awk 在开始处理输入文件之前会执行 BEGIN 块,因此它是初始化 FS(字段分隔符)变量、打印页眉或初始化其它在程序中以后会引用的全局变量的极佳位置。
awk 还提供了另一个特殊块,叫作 END 块。 awk 在处理了输入文件中的所有行之后执行这个块。通常, END 块用于执行最终计算或打印应该出现在输出流结尾的摘要信息。
应用⑤
统计netstat -anp状态为LISTEN和CONNECT的连接数量分别是多少
1 | netstat -anp|awk '$6~/LISTEN|CONNECTED/{sum[$6]++} END{for (i in sum) printf "%-10s %-6s %-3s \n",i,"",sum[i]}' |
应用⑥
统计/home目录下不同用户的普通文件的总数是多少?
1 | [root@docker-Reg ~]# ls -l|awk 'NR!=1 && !/^d/{sum[$3]++} END{for (i in sum)printf "%-6s %-5s %-3s \n",i,"",sum[i]}' |
统计/home目录下不同用户的普通文件的大小的总size是多少?
1 | [root@docker-Reg ~]# ls -l|awk 'NR!=1 && !/^d/{sum[$3]++} END{for (i in sum)printf "%-6s %-5s %-3s %-2s \n",i," ",sum[i]/1024/1024,"MB"}' |
应用⑦
输出成绩表
1 | [root@docker-Reg ~]# cat >test0 <<EOF |
应用⑧
利用awk取IP及子网掩码;
1 | [root@docker-Reg ~]# ip addr show eth0|awk -F'[: ]+' 'NR==3 {print $3,$5}' |
Author: focusshell
Link: http://focusshell.github.io/2018/08/29/Day-3-AWk应用/
Copyright: All articles in this blog are licensed under CC BY-NC-SA 3.0 unless stating additionally.