linux shell 查询access.log 访问量

#统计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);
	}