awk进阶之数组

案例一、分析IP出现的次数

#执行下列命令生成ip.log文件作为测试
cat >ip.log<<'EOF' 
10.0.0.1
10.0.0.2
10.0.0.2
10.0.0.4
10.0.0.1
10.0.0.4
10.0.0.5
10.0.0.1
10.0.0.1
10.0.0.2
EOF

简单方法:采用sort+uniq组合

[root@m01~]# sort ip.log |uniq -c
      4 10.0.0.1
      3 10.0.0.2
      2 10.0.0.4
      1 10.0.0.5

使用awk数组的方法

[root@m01~]# awk '{ip[$1]++}END{for(n in ip) print ip[n],n}' ip.log 
4 10.0.0.1
3 10.0.0.2
2 10.0.0.4
1 10.0.0.5

注意:这里数组的下表并不是数字,而是IP,很多编程语言一般都不直接支持数组的表为非数字,但是awk支持。

案例二、分析每个IP的访问流量

#执行下列命令生成ip.log文件作为测试
cat >ip_flow.log<<'EOF' 
10.0.0.1 10
10.0.0.2 20
10.0.0.2 10
10.0.0.4 30
10.0.0.1 30
10.0.0.4 40
10.0.0.5 20
10.0.0.1 10
10.0.0.1 30
10.0.0.2 40
EOF

使用awk函数计算

[root@m01~]# awk '{ip[$1]+=$2}END{for(n in ip) print n,ip[n]}' ip_flow.log 
10.0.0.1 80
10.0.0.2 70
10.0.0.4 70
10.0.0.5 20
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容