1.1 wk数组
1. 取出/etc/passwd中uid在1到500之间的用户名和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