Awk 流程控制 for if while 语句 Awk 支持语句作为指令,这些指令必须要放在 { } 里面 单分支:if (条件){编辑指令} [root@svr5 ~]# awk -F: 'BEGIN{i=0}{if($3<=500){i++}}END{print i}' /etc/passwd 31 类似于 awk -F: '{if($3<=500)print $3}' /etc/passwd |wc -l 双分支结构:if (条件){编辑指令} else {编辑指令 2} awk -F: 'BEGIN{i=0;j=0}{if($3<=500){i++}else{ j++}}END{print i,j}' /etc/passwd BEGIN{i=0;j=0}可以省略,因为默认从 0 开始 多分支结构:if (条件){编辑指令} else {编辑指令 2} else {编辑指令 3} [root@svr5 ~]# awk -F: 'BEGIN{i=0;j=0;k=0}{if($7~/bash$/){i++}
else if($7~/nologin$/){ j++}else{k++}}END{print i,j,k}' /etc/passwd while 循环求词频 :在某个文档中,某个词出现的频率 [root@ Shell ~]# awk -F: '{i=1;while(i<=NF){if($i~/root/){x++};i++}} END{print x}' /etc/passwd 脚本写的格式为 i=1 While (i<=NF){ If ($i~/root/) {x++} i++} Awk 数组 统计任何东西出现多少次 Awk ‘X[$1]++ END {print}’ [root@room8pc01]# awk '{IP[$1]++}END{for(i in IP){print IP[i],i}}' /var/log/httpd/access_log | awk '$1>10{print $2}' [$1]为数组的下标,是个变量,每次读取的时候读取每行的第一列,如果是$2,每次读 取就读取第二列 (i in IP ) for 循环的是 IP 下标,在到 END 这一步,整体循环已经结束,IP 根据 IP 的下标来确定,每个 IP 出现多少次,然后输出 定义数组 :awk 'BEGINZ{name[0]="jim";name[1]="tom"}' 调用数组:awk ‘{print name[0],name[1]}' awk中的数组与shell脚本中的数组,不是一个概念!!