Cygwin处理网站日志文件
cygwin是一款windows平台上运行的linux模拟器.他可以通过强大的linux批处理命令对大型文件进行效率极高的处理,提高文件处理效率.
使用Cygwin实现shell处理环境,Cygwin下载地址:http://www.cygwin.cn/site/install/
curl、lynx、python、base、shells
扩展阅读:cygwin安装、windows下安装cygwin及配置
shell基本指令(实现光年日志拆分功能)
shell指令参考:http://www.linuxso.com/command/
cd–确定网站日志所在文件夹
cd /cygdrive/d/weblog/
ls–显示当前文件夹中的所有文件
cat–打开文件&连接文件
cat bj.log
grep–提取文件的数据
grep Baiduspider bj.log >bj_baidu.log
grep命令参数:http://blog.chinaunix.net/uid-20544356-id-132341.html
常用grep参数:
-i 忽略大小写
-l 只显示匹配到的文件名
-n 显示行号
-o 只显示匹配的字符
-r 递归查询
-v 只显示不匹配的行
awk–分割数据
awk ‘{print $8,$12}’ bj_baidu.log >bj_baidu_url.log
awk ‘{if($10~”404″)print $8,$12}’ bj_baidu.log >bj_baidu_404.log
awk命令学习参考:
http://www.cnblogs.com/chengmo/archive/2013/01/17/2865479.html
http://blog.csdn.net/jihen/article/details/5957304
sort–排序
参考:sort命令参数及其用法详解
uniq–数据汇总
shell组合:
1.提取百度蛛蛛访问产生的所有状态码和数量,并按降序排列
awk ‘{print $10}’ baidu.log |sort|uniq -c|sort -nr |awk ‘{print $2 “t” $1}’ >baiduma.log
2.提取所有404、301、302等非正常状态码的页面并按降序排列
awk ‘{if($10~”404″)print $8,$10}’ baidu.log|sort >baiduma.log
3.返回状态码为”X”最多的前TOP10二级目录
cat baidu.log|awk ‘{if($10~”404″)print $8,$6}’ |awk -F”/” ‘{print $2}’|sort|uniq -c|sort -nr|head -n10
4.计算abc目录在返回状态为“X”时被百度抓取多少次
cat baidu.log|awk ‘{if($10~”404″)print $8,$6}’ |awk -F”/” ‘{if($2~”zufang”)print $0}’|wc -l
5.判断状态码为“X”时abc目录的层级为多少
cat baidu.log|awk ‘{if($10~”404″)print $8,$6}’ |awk -F”/” ‘{if($2~”zufang”&&$3 == “”)print $0}’|wc -l
6.提取返回出错目录的层级前500条,并降序排列
cat baidu.log |awk ‘{if($810~ “404”)print $8,$6}’|awk -F”/” ‘{if($2~”zufang” && $4)print $0}’|sort|head -n500
7.统计URL抓取次数,并降序排列
cat baidu.log|awk ‘{print $8}’|sort|uniq -c|sort -nr >paixu.log
8.有多少IP访问
awk ‘{print $1}’ baidu.log|sort|uniq|wc –l
9.查看某页面访问次数
grep “/abc/” baidu.log|wc -l
10.每个IP访问次数
cat baidu.log | awk ‘{print $1}’ | sort | uniq -c | sort -k1r
11.某IP访问的页面
grep ‘***.***.***.***’ baidu.log|awk ‘{print $1,$8}’
12.查看所有页面的访问次数,降序排列
cat baidu.log|awk ‘{print $8}’|sort|uniq -c|sort -nr
13.查看记录个数
awk ‘END{print NR}’ baidu.log
14.抓取SERP TOP10的URL
curl -s http://www.baidu.com/s?wd=keywords|grep -o “http://www.baidu.com/link?[^”|’]*”|xargs curl -s|grep -o “http://[^”]*”
15.删除重复行
awk ‘!a[$0]++’ filename
//统计不重复抓取数量
cat baidu.log | awk ‘{print $4}’|sort|uniq|wc -l
//统计所有状态码数量
awk ‘{print $10}’ baidu.log |sort|uniq -c
//统计某个目录抓取次数
grep “/shop” baidu.log | awk ‘{print $4}’ |sort |wc –l
//统计各个目录出现404响应码次数
awk ‘{if($10==”404″){print $0}}’ baidu.log|sort|uniq -c|wc -l
//统计404页面的抓取数量
awk ‘{if($10==”404″){print $0}}’ baidu.log|sort|uniq|wc -l
//统计每个ip下对应URL的抓取次数
awk ‘{print $6,$4}’ baidu.log |sort|uniq –c
//提取百度蜘蛛访问数量前10的网站目录及访问次数,并按降序排列
awk ‘{print $4}’ baidu.log |grep -P “[^/(a-zA-Z)|^/(a-zA-Z)/]”|awk -F”/” ‘{print $2}’|sort|uniq -c|sort -r|head -10
//提取某个目录百度蛛蛛访问次数
cat baidu.log | grep “/shop/”| wc –l
cat baidu.log |awk ‘{print $4}’ |grep “/shop/” |wc –l
cat baidu.log |awk ‘{print $4} |awk –F”/” ‘{print $2}’|grep “shop”|wc -l
//统计首页抓取的次数占总体抓取次数比率
cat baidu.log |awk ‘{print $4}’|awk ‘{if($0==”/”){n=n+1}}END{print n/NR*100″%”}’
//统计404响应码占总响应码比率
cat baidu.log |awk ‘{print $10}’|awk ‘{if($0==”404″){n=n+1}}END{print n/NR*100″%”}’
//计算百度抓取总字节数
cat baidu.log |awk ‘{print $11}’|awk ‘BEGIN{total=0}{total+=$1}END{print total}’
//计算平均每次每个网页抓取字节数(小数点后面大于5进1)