linux awk命令详解二-----控制语句

                 linux awk命令详解二-----控制语句


一.if-else

语法:if (condition条件表达式) {then-body} else {else-body }

示例:

  1. 判断/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用于引用数组下标,而不是元素值

示例:

  1. 统计netstat -n命令当前处于各种状态的数量

    netstat -an |awk '/^tcp/{++s[$NF]}END{for(a in s) printf "%10s:%s\n",a,s[a]}'

  2. 统计/etc/passwd文件中shell类型不为空,并且每个shell的个数

    awk -F: '$NF!~/^$/{shell[$NF]++}END{for(a in shell) print a,shell[a]}' /etc/passwd

  3. 统计apache访问日志中每个IP的访问次数

    awk '{ip[$1]++}END{for(a in ip) print a,ip[a]}'  /usr/local/apache/logs/access_logs

先说这么多,以后还会慢慢更新,谢谢支持。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章