#统计key为 wanzitest20170118105738=[a-zA-Z0-9] 并忽略大小写统计iPhone|Linux,针对key去重,去重之后统计ip出现次数,如果ip
cat access.log |grep "wanzitest20170118105738=[a-zA-Z0-9]" |grep -i -E "iPhone|Linux" |grep -v "favicon.ico"|grep -v "&" |awk '!a[$7]++{print}' |awk -F"[ ]" '{print $(1)}' |sort |uniq -c |sort -n | awk -F' ' '{print $1}'|awk '{ if ($1 < 6000) print $1}' |awk '{sum+=$1} END {print "Sum = ", sum}'
#查询access.log 匹配 wanzitest20170118105738=[a-zA-Z0-9]的数据
#
cat access.log |grep "wanzitest20170118105738=[a-zA-Z0-9]" >test.log
#查询 test.log 忽略大小写匹配iPhone或Linux 的数据
#grep -i 忽略大小写统计
#grep -E 统计iPhone 或 Linux
cat test.log |grep -i -E "iPhone|Linux" >test.log
#查询 test.log 中除 favicon.ico 或 & 的数据
#grep -v 排除数据
cat test.log |grep -v "favicon.ico"|grep -v "&" >test.log
#查询 test.log 中第7列 key值得不重复的数据
#awk ‘!a[$7]++{print}’ 去除第7列重复行,不重复数据输出
#{print} 输出全部
cat test.log |awk '!a[$7]++{print}' >test.log
#查询 test.log 中ip 以及 ip出现次数
# awk -F”[ ]” 按照空格分割
# ‘{print $(1)}’ 输出分割$1
# sort $(1)升序排序
# uniq -c 统计出现次数,并输出 $(1)出现次数 $(1)
# sort -n 按照出现次数升序排序
cat test.log | awk -F"[ ]" '{print $(1)}'|sort |uniq -c |sort -n >test.log
#查询 test.log 中ip出现次数
# awk -F’ ‘ ‘{print $1}’ 按照空格分割,输出第一列
cat test.log | awk -F' ' '{print $1}'
#查询 test.log 第一列值小于6000的数据 并输出第一列
#if ($1 < 6000) 第一列值小于6000的数据
cat test.log | awk '{ if ($1 < 6000) print $1}'
#查询 test.log 第一列值累计相加,并且输出和
# {sum+=$1} 累计相加第一列
# END {print sum}累计相加后输出sum
cat test.log |awk '{sum+=$1} END {print sum}'
public static void main(String[] args) throws UnsupportedEncodingException, FileNotFoundException, IOException { Pattern regex0 = Pattern.compile("wanzitest20170117202935=([a-zA-Z0-9]+)"); Pattern regex1 = Pattern.compile("(android)|(ios)|(AppleWebKit)"); final Set<String> mobiles = new HashSet<>(); Map<String ,Integer> ips =new HashMap<>(); File log = new File("E:\\", "access.log"); if (log.exists()) { try (BufferedReader reader = new BufferedReader( new InputStreamReader(new FileInputStream(log),"GBK"))) { String line = null; int i=0; int j=0; int k=0; // System.setOut(new PrintStream(new FileOutputStream("E:\\test.log")));//日志打印输出文件 while ((line = reader.readLine()) != null) { i++; Matcher matcher = regex0.matcher(line); if (matcher.find() && regex1.matcher(line).find()) { k++; String mobile = matcher.group(1).trim(); Boolean flag =mobiles.add(mobile);//滤出重复访问 //add 2017-1-16 wrc 统计ip出现的次数 String ip=line.substring(0,line.indexOf(' ')); if(flag==true){ if(!ips.containsKey(ip)){ ips.put(ip, 1); }else{ ips.put(ip, ips.get(ip)+1); } } } } System.out.println("========总行数i"+i); System.out.println("========第二匹配k"+k); System.out.println("========去重个数"+mobiles.size()); } } //add 2017-1-16 wrc 排除访问次数大于ystNginxManagerIpMaxcount的访问次数 int count=mobiles.size(); for (int ipCount : ips.values()) { if(ipCount >= 5000){ System.out.println("========总行数i"+ipCount); count=count - ipCount; } } System.err.println("------------去除》=200:"+count); }