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
先說這麼多,以後還會慢慢更新,謝謝支持。