linux上使用awk数组统计的编程
awk数组不同于其他编程语言的数组,比较灵活称为关联数组,这种数据结构不需要使用前进行定义:声明其大小,因为它在运行时可以自动的增大或减小且下标(索引)不局限于数字,也可以使用字符串。
统计案例: 分析以下网站被访问的日志文件,将每个域名被访问的次数进行统计并排序:
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
要求结果:
mp3.etiantian.org 1
post.etiantian.org 2
www.etiantian.org 3
思路:
1.以斜线为分隔符取出第二列$2(域名),此处如不理解请先学习awk的基本用法
2.创建一个数组domain,把第二列$2(域名)作为数组的下标,通过++运算符对该域名的访问数量进行累加。awk处理第一行时,domain[$2]则为domain[www.etiantian.org],domain[$2]++(domain[www.etiantian.org]=domain[www.etiantian.org]+1),当domain[www.etiantian.org]未进行赋值时初始值默认为0,运算后domain[www.etiantian.org]=1
根据awk程序,执行规则,由上往下依次处理文件行,当处理第二行时仍然是domain[www.etiantian.org],所以还是domain[www.etiantian.org]=domain[www.etiantian.org]+1,那么domain[www.etiantian.org]=1+1
3.遍历数组的键和值并反序排列把结果输出
4.代码:awk -F "/+" '{domain[$2]++}END{for(key in domain) print key,domain[key]}' url.txt|sort -rnk
本文来自博客园,作者:Albert_M,转载请注明原文链接:https://www.cnblogs.com/Albert-M/p/17641087.html
浙公网安备 33010602011771号