数组:一个个元素按一定顺序排列的集合。

.定义方法

1.可以用数值做数组索引(下标)

array[1]=”oldboy”

array[2]=”oldgirl”

2.可以用字符串作数组索引(下标)

array_oldboy[”one”]=”oldboy trainging”

array_oldboy[”two”]=”welcome”

array_oldboy[”three”]=”test”

3打印数组:

awk ’BEGIN{ array[1]=”oldboy”;array[2]=”oldgirl”;for(keyin array) print key,array[key]} ’

写成脚本:vi t1.awk

#/bin/awk

BEGIN{

 array[1]=”oldboy”;

array[2]=”oldgirl”;

for(key in array)

 print key,array[key];

}

 

执行:awk –f t1.awk

 

awk ’BEGIN{ array[1]=”oldboy”;array[2]=”oldgirl”;}END{for(keyin array) print key,array[key]} ’ /etc/hosts

提供BEGINEND的作用是给程序赋予初始状态和程序结束之后执行一些扫尾工作。任何在BEGIN之后列出的操作(在{}内)将在awk开始扫描输入之前执行,而END之后列出的操作将在扫描完全部的输入之后执行。因此,通常使用BEGIN来显示变量和预置(初始化)变量,使用END来输出最终结果。

或:cat/etc/hosts| awk ’BEGIN{ array[1]=”oldboy”;array[2]=”oldgirl”;}END{for(key inarray) print key,array[key]} ’

 

把文件内容第一列作为下标k,第二列作为值S[k],放入数组S[]然后输出

cat /etc/hosts| awk ’BEGIN{ array[1]=”oldboy”;array[2]=”oldgirl”;}END{for(keyin array) print key,array[key]} ’>t3.log

cat t3.log

awk ’{S[$1]=$2}END{for(k in S) print k,S[k]}’ t3.log

cat t3.log

 

案例1:处理以下文件内容,将域名取出并根据域名进行计数排序处理

oldboy.log

http://www.etiantian.org/index.html

http://www.etiantian.org/1.html

http://post.etiantian.org/index.html

http://mp3.etiantian.org/index.html

http://www.etiantian.org/3.html

http://post.etiantian.org/2.html

 

cut –d / -f3 oldboy.log|sort –r|uniq –c

 

awk –F ”/”  ’ {S[$3]= S[$3]+1}END{for (k in S) printk,S[k]}’ oldboy.log|sort –rn –k2|head 10

 

案例2:统计web日志单ip访问请求数排名

access-test.log

awk ’{S[$1]++}END{for( k in S ) printk,S[k]}’ access-test.log|sort –rn –k2|head

awk ’{print $1}’ access-test.log |sort|uniq–c|sort –rn |head

 

案例3:统计企业中高并发web服务器不同网络连接状态对应数量

nerstat.log

awk ’/^tcp/ {S[$NF]++}END{for(k in S) printS[k],k}’ netstat.log|sort –rn|head

awk ’/^tcp/ {print $NF}’netstat.log|sort|uniq –c|sort –rn|head