linux awk命令详解二-----控制语句
一.if-else
语法:if (condition条件表达式) {then-body} else {else-body }
示例:
判断/etc/passwd中管理员和普通用户
awk -F: '{if($1=="root") print $1,"admin";else print $1,"commom user"}' /etc/passwd
awk -F: '{if($1=="root") printf "%-15s:%s\n",$1,"admin";else printf "%-15s:%s\n",$1,"commom user"}' /etc/passwd
3.统计/etc/passwd中UID号大于500的用户的个数
awk -F: -v sum=0 '{if($3>=500) sum++;}END{print sum}' /etc/passwd
二.while
语法:while(condition){statement1;statment2; ...}
示例:
1.打印/etc/passwd前三个字段
awk -F: '{i=1;while(i<=3){print $i;i++}}' /etc/passwd
三.do-while
语法: do {statement1, statement2, ...} while (condition)
示例:
1.打印/etc/passwd前三个字段
awk -F: '{i=1;do{print $i;i++}while(i<=3)}' /etc/passwd
四.for
语法:for(variable assignment; condition; iteration process) { statement1, statement2, ...}
示例:
1.打印/etc/passwd前三个字段
awk -F: '{for(1=1;1<=3;i++) print $i;}' /etc/passwd
五.case
语法:switch (expression) { case VALUE or /REGEXP/: statement1, statement2,... default: statement1, ...}
六.break 和 continue常用于循环或case语句中
七.next提前结束对本行文本的处理,并接着处理下一行
八.AWK中使用数组
array[index-expression]
index-expression可以使用任意字符串;需要注意的是,如果某数据组元素事先不存在,那么在引用其时,awk会自动创建此元素并初始化为空串;因此,要判断某数据组中是否存在某元素,需要使用index in array的方式。
九.遍历数组
for (var in array) { statement1, ... } 其中,var用于引用数组下标,而不是元素值
示例:
统计netstat -n命令当前处于各种状态的数量
netstat -an |awk '/^tcp/{++s[$NF]}END{for(a in s) printf "%10s:%s\n",a,s[a]}'
统计/etc/passwd文件中shell类型不为空,并且每个shell的个数
awk -F: '$NF!~/^$/{shell[$NF]++}END{for(a in shell) print a,shell[a]}' /etc/passwd
统计apache访问日志中每个IP的访问次数
awk '{ip[$1]++}END{for(a in ip) print a,ip[a]}' /usr/local/apache/logs/access_logs
先说这么多,以后还会慢慢更新,谢谢支持。