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());
            }
        }
    }
}

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

 

Logo

更多推荐