awk 数组无须实现定义
ckl[abc]=6
ckl[xyz]=9
abc 为下标名称
9 则为下标对应的值
BEGIN 为模式前匹配,即为匹配之前操作
END 为模式匹配后,即为匹配后操作
如常用的统计TCP状态的awk命令
# netstat -ant | awk ‘/^tcp/{STA[$NF]++}END{for ( k in STA) {print k,STA[k]}}‘
TIME_WAIT 4
CLOSE_WAIT 19
FIN_WAIT2 1
ESTABLISHED 135
LAST_ACK 2
LISTEN 21
/^tcp/ 匹配以tcp开头的
STA 定义一个数组
$NF 为最后一个字段
STA[$NF]++ 将最后一个字段内容加入到数组中,最后一个字段内容为下标,如果相同则递加
END 定义匹配后的操作
for ( k in STA) 定义k为变量,循环数组STA
print k,STA[k] 打印下标的内容和数组对于下标的值
如统计nginx 访问ip的统计量
# cat access.log
58.49.184.16 - - [15/Jan/2014:15:40:12 +0800] "GET /zh_CN/dragonball/announcement.xml HTTP/1.1" 404 570 "-" "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.63 Safari/537.36"
58.49.184.16 - - [15/Jan/2014:15:40:14 +0800] "GET /favicon.ico HTTP/1.1" 404 570 "-" "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.63 Safari/537.36"
58.49.184.16 - - [15/Jan/2014:15:41:07 +0800] "GET /zh_CN/dragonball/ HTTP/1.1" 403 570 "-" "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.63 Safari/537.36"
58.49.184.16 - - [15/Jan/2014:15:41:14 +0800] "GET /zh_CN/ HTTP/1.1" 403 570 "-" "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.63 Safari/537.36"
执行命令
# cat access.log | awk ‘{ACC[$1]++}END{for (c in ACC) {print c,ACC[c]}}‘
58.49.184.16 6
ACC 定义数组
$1 第一个字段为下标,即IP
ACC[$1]++ 定义ACC数组,ip为数组下标,如IP相同则递加,下标对应的值为递加后的结果
print c,ACC[c] 打印IP及IP为下标的数组的内容