统计日志中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 '{
·
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条内容
所有评论(0)