用awk和python实现分组求和

日志分析场景中,时常会遇到需要计算哪个ip请求次数最多,哪个ip请求总时延最多,哪个ip或uri请求的数据量最大等等,亦或是做一个求出总和的排序,以下用两种方式来解决此类需求。
日志格式如下:

第一列:ip
第九列:返回状态
第十列:给用户返回的大小

求出第一列每个ip总共返回了多少数据,并进行排序:
1、awk

awk ‘{a[$1]+=$10} END{ for(i in a) print a[i], i}’ LOGFILE | sort -n -k 1 -r

2、python

#!/usr/bin/env python

class GroupSum:
    def __init__(self, filename):
        self.filename = filename

    def sum(self, group_col, sum_col):
        group_dist = {}
        with open(self.filename, 'r') as f:
            for line in f.readlines():
                 ip = line.split()[group_col-1]
                 try:
                     value = int(line.split()[sum_col-1])
                 except ValueError:
                     continue
                 if group_dist.has_key(ip):
                     group_dist[ip] += value
                 else:
                     group_dist[ip] = value
        return group_dist

if __name__ == "__main__":
    proc_file = GroupSum("/ser/logs/access.log")
    result = proc_file.sum(1,10)
    result = sorted(result.iteritems(), key=lambda x:x[1])
    print result
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值