统计日志中ip访问次数并排序的三种方法

1  利用linux中的awk命令

grep "GET aaa.log | awk -F " " '{print $NF}' >d:/test.log

假设日志的最后一行是ip地址,则取出日志的最后一行以空格为分隔符并且重定向到d盘下的test.log中。

取出之后还可以进一步操作直接统计出ip访问的次数并且降序排列。

cat test.log | sed 's/:[0-9]\+//g'| awk '{IP[$1]++}END {for(a in IP) print a"-----"IP[a]}' |sort -r > d:/test1.log

2 提取到ip后,可以利用excel对ip地址对访问次数进行统计(数据透视表解决方案)

此小节的数据透视表解决方案转自https://blog.51cto.com/crazysmogu/2051735

 (1)按照默认设置,在新工作表中创建数据透视表,点击【确定】按钮。

 

(2)在新出现的透视表区域,用鼠标单击任何一个单元格。然后把【姓名】字段分别拖到【行标签】和【数值】两个方框中去。

(3)这样,透视表中行标签就显示了A列不重复姓名,后面一列跟随的就是出现的次数。 

 

图五

图五

 

3编写脚本进行提取(利用map)

import java.io.*;
import java.util.*;

public class ipCount{
    public static void main(String[] args) throws IOException {
        HashMap<String,Integer> hash=new HashMap<String,Integer>();
        Set<String> keySet=hash.keySet();
        File file = new File("D:/ip.txt");
        try (FileInputStream stream = new FileInputStream(file);
             InputStreamReader streamReader = new InputStreamReader(stream);
             BufferedReader reader = new BufferedReader(streamReader) ) {
            String line = "";
            int count=1;
            while((line = reader.readLine()) != null) {
                if (keySet.contains(line)) {
                    count=(int)hash.get(line)+1;
                    hash.put(line,count);
                } else {
                    hash.put(line,1);
                }
            }
            List<Map.Entry<String,Integer>> list = new ArrayList<Map.Entry<String,Integer>>(hash.entrySet());
            Collections.sort(list,new Comparator<Map.Entry<String,Integer > >() {
                public int compare(Map.Entry<String, Integer> o1,
                                   Map.Entry<String, Integer> o2) {
                    return o2.getValue().compareTo(o1.getValue());
                }
            });
            for(Map.Entry<String,Integer> mapping:list){
                System.out.println(mapping.getKey() + ":" + mapping.getValue());
            }
        }
    }
}

 欢迎转载:转载请注明出处。

 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值