1.1 wk数组

1.      取出/etc/passwduid1500之间的用户名和uid号码

awk -F: '$3>=1 && $3<500{print $1,$3}' /etc/passwd

2.      显示系统最近一分钟 五分钟 十五分钟的负载

w |awk -F'[ ,]+' '/load/{print $(NF-2),$(NF-1),$NF}'

3.      显示你系统中所有的非虚拟用户的用户名和使用的shell并统计数量

awk -F: '/bash$/{i++;print $1,$NF}END{print i}' passwd.txt

4.      统计Secure(给大家发送的)文件每个ip地址破解你密码次数显示前十名

sort -rnk2

#-r  逆序 

#-n  按照数字 顺序排序

#-k  根据某一列的内容排序

[root@oldboy50-01 /server/files]# awk '/Failed/{h[$(NF-3)]++}END{for(i in h) print i,h[] }' secure-20161219|sort -rnk2 |column -t|head

218.65.30.25     68652

218.65.30.53     34326

218.87.109.154   21201

112.85.42.103    18065

112.85.42.99     17164

218.87.109.151   17163

218.87.109.150   17163

218.65.30.61     17163

218.65.30.126    17163

218.65.30.124    17163

5.统计Secure中每个用户破解的次数

[root@oldboy50-01 /server/files]# awk '/Failed/{h[$(NF-5)]++}END{for(i in h) print i,h[] }' secure-20161219|sort -rnk2 |column -t|head

root           364610

admin          733

user           246

oracle         119

support        104

guest          79

test           70

ubnt           47

pi             41

webadmin       36

6.统计access.log中所有流量总和(第10列)

[root@oldboyedu50-lnb /server/files]# awk  '{sum=sum+$10}END{print sum/1024^3}' access.log

2.30828

i=i+1   ==  i++            统计次数  wc -l

i=i+$1  ==  i+=$1          求和 累加 1+2+3...+100

1.2 awk中循环与判断

1.2.1 shell编程

判断

if [  ];then

   xxxx

fi

1.2.2 awk中的

if(NR==1)

print $0

if(NR==1) print $0

[root@oldboyedu50-lnb /server/files]# awk  'NR==1' reg.txt

Zhang Dandan    41117397   :250:100:175

[root@oldboyedu50-lnb /server/files]# awk  '{if(NR==1) print}' reg.txt

Zhang Dandan    41117397   :250:100:175

实例1-1              统计{}中包含oldboy的行行数

[root@oldboyedu50-lnb /server/files]# awk '/{/,/}/' range.txt

{

lidao

oldboy

alex

oldboy oldboy

}

{

lidao

oldboy

alex

oldboy oldboy

}

{

lidao

oldboy

alex

oldboy oldboy

}

实例1-2              统计{}中包含oldboy的行行数

[root@oldboyedu50-lnb /server/files]# awk '/{/,/}/{if(/oldboy/) i++}END{print i}' range.txt

6

1.3 awk循环

1.3.1 shell编程

for((i=1;i<=100;i++))

do

    echo $i

done

1.3.2 awk

for(i=1;i<=100;i++)

命令

awk 'BEGIN{for(i=1;i<=100;i++)sum=sum+i ;print sum}'

实例1-3              处理以下文件内容,将域名取出并根据域名进行计数排序处理:(百度和sohu面试题)

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

1.4 数组

数组名称[元素]

数组名称[下标]

awk 'BEGIN{ h[110]="laowang";h[120]="tao"; print h[110],h[120],h[12306]    }'

laowang tao

 

[root@oldboyedu50-lnb /server/files]# awk -F"[/.]+" '/www/{i++}/post/{j++}/mp3/{k++}END{print i,j,k}' url.txt

3 2 1

实例1-4              awk数组 统计 www post mp3出现的次数

[root@oldboyedu50-lnb /server/files]# awk -F"[/.]+"  '{h[$2]++}' url.txt

[root@oldboyedu50-lnb /server/files]# awk -F"[/.]+"  '{h[$2]++;print h["www"]}' url.txt

1

2

2

2

3

3

 

显示www post mp3出现次数

 

[root@oldboyedu50-lnb /server/files]# awk -F"[/.]+"  '{h[$2]++}END{print h["www"],h["post"],h["mp3"]}' url.txt

3 2 1

 

自动显示数组里面的内容

 

[root@oldboyedu50-lnb /server/files]# awk -F"[/.]+"  '{h[$2]++}END{for(i in h) print i }' url.txt

www

mp3

post

[root@oldboyedu50-lnb /server/files]# awk -F"[/.]+"  '{h[$2]++}END{for(i in h) print i,h[i] }' url.txt

www 3

mp3 1

post 2