1.awkif分支结构if分支结构(单分支、双分支、多分支)单分支--if(条件){编辑指令}双分支--if(条件){编辑指令1}else{编辑指令2}多分支--if(条件){编辑指令1}elseif(条件){编辑指令2}....else{编辑指令N}case1awkfilteringIf分支结构1??)统计单个分支中/etc/passwd文件中UID小于等于1000的用户数:[root@case100~]#awk-F:'{if($3<=1000){i++}}END{printi}'/etc/passwd23统计/etc/passwd文件中UID大于1000的用户数:[root@case100~]#awk-F:'{if($3>1000){i++}}END{printi}'/etc/passwd3统计/etc/passwd文件中登录shell为“/bin/bash”的用户数:[root@case100~]#awk-F:'{if($7~/bash$/){i++}}END{printi}'/etc/passwd52)双分支分别统计UID小于等于1000和UID大于1000的用户数在/etc/passwd文件中:[root@case100~]#awk-F:'{if($3<=1000){i++}else{j++}}END{printi,j}'/etc/passwd233统计,/etc/passwd文件中的登录shell是“/bin/bash”,登录shell不是“/bin/bash”的用户数:[root@case100~]#awk-F:'{if($7~/bash$/){i++}else{j++}}END{printi,j}'/etc/passwd5212.awkarrayarray的语法格式数组是一个可以存储多个值的变量。具体使用格式如下:定义数组--格式:数组名[下标]=元素值调用数组--格式:数组名[下标]遍历数组--用法:for(variableinarrayname){print数组名[变量]}case2forloop[root@case100~]#awk'BEGIN{a[0]=11;a[1]=88;printa[1],a[0]}'8811[root@case100~]#awk'BEGIN{a++;printa}'1[root@case100~]#awk'BEGIN{a[0]=0;a[1]=11;a[2]=222;for(iina){printi,a[i]}}'001112222注意awk数组的下标不仅可以用数字,还可以用字符串,字符串需要用双引号:[root@case100~]#awk'BEGIN{a["hehe"]=22;printa["hehe"]}'22案例三:awk扩展应用1)awk统计web访问排名在分析web日志文件时,每条访问记录的第一列都是客户端的IP地址,会出现很多重复的IP地址。仅仅使用awk来提取这一列是不够的,还需要统计重复记录的个数并进行排序。通过awk提取信息时,将IP地址作为数组的下标,每遇到一个重复的值数组元素就加1,最后得到IP地址出现的次数。sort命令可用于文本排序输出,相关的常用选项有-r、-n、-k。其中-n表示按数字升序排序,-r表示倒序,-k可以指定排序的字段个数。要实现此案例,您需要按照以下步骤操作。第一步:网站访问量统计排名分步测试验证结果如下。1)提取IP地址和流量[root@case100~]#awk'{ip[$1]++}\>END{for(iinip){printip[i],i}}'/var/log/httpd/access_log4127.0.0.117192.168.4.513192.168.4.110......2)步骤1)的结果按照访问次数排序[root@case100~]#awk'{ip[$1]++}END{for(iinip){printi,ip[i]}}'/var/log/httpd/access_log|sort-nr17192.168.4.513192.168.4.1104127.0.0.1......案例四:编写监控脚本本案例需要编写脚本来实现监控各种计算机性能数据的功能。具体监控项目如下:CPU负载、网卡流量、内存剩余容量、磁盘剩余容量、电脑账号数、当前登录账号数、电脑当前开启进程数、本机安装步骤对于软件包数量实现本案例,需要按照以下步骤进行。Step1:准备1)查看性能数据的命令[root@case100~]#uptime//查看CPU负载[root@case100~]#ifconfigeth0//查看网卡流量[root@case100~]#free//查看内存信息[root@case100~]#df//查看磁盘空间[root@case100~]#wc-l/etc/passwd//查看电脑账号数[root@case100~]#who|wc-l//查看登录账号数[root@case100~]#rpm-qa|wc-l//查看安装的软件包数量第二步:编写参考脚本1)脚本内容如下:[root@svr5~]#vimtest.sh#!/bin/baship=`ifconfigeth0|awk'/inet/{print$2}'`echo"本地IP地址是:"$ipcpu=`uptime|awk'{print$NF}'`#awk中的NF是当前行的列数,$NF是最后一列echo"最近15分钟本地CPU的负载是:"$cpunet_in=`ifconfigeth0|awk'/RXp/{print$5}'`echo"入站NIC流量为:"$net_innet_out=`ifconfigeth0|awk'/TXp/{print$5}'`echo"出网卡流量为:"$net_outmem=`free|awk'/Mem/{print$4}'`echo"剩余内存容量是:"$memdisk=`df|awk'/\/$/{print$4}'`echo"根分区的剩余容量为:"$diskuser=`cat/etc/passwd|wc-l`echo"本地账号为:"$用户登录=`谁|wc-l`echo"当前登录电脑的账号数为:"$loginprocess=`psaux|wc-l`echo"当前计算机启动的进程数为:"$processsoft=`rpm-qa|wc-l`echo"当前电脑安装的软件个数为:"$soft[root@logfile~]#bashtest.sh本机IP地址为:192.168.44.99最近15年本机CPU负载分钟为:0.05入站网卡流量为:4942189501092出站网卡流量:9051024375282内存剩余容量:160136根分区剩余容量:84142524本地账户数:32当前登录电脑的账户数:1进程数当前电脑启动数:160当前电脑已安装软件数:403
