Shell日志分析常用命令和例子
学会用shell分析日志只要一上午!!!
很多地方分享了日志分析的shell脚本,但是基本没说每个命令符的具体含义,学习成本还是很高,在这里总结下,方便大家快速入门。
1、在Windows下的用户要使用shell命令符的话请先安装cygwin,安装方法自行Google(搜技术问题请使用google,百度搜不到活该)
2、下面粗略介绍下SEO日志分析常用的命令符用法,需要详细了解每个命令符请使用Google。
less文件名查看文件内容按“q”退出
cat文件名打开文件,可以多次打开几个文件|cat1.log2.log|cat*.cat
grep-参数文件名
-i不区分大小写
-v显示不符合条件的所有行
-c显示符合条件的所有行数(符合条件的数量)
egrep属于grep的升级版,在正则这一块的支持更完善,使用正则的时候建议使用egrep
head-2文件名显示2行
head-100文件名|tail-10>>a.log提取文件第91-100行数据
wc-参数文件名统计文本大小,字符多少,行数
-c统计文本字节数
-m统计文本字符数
-l统计文本有多少行
sort–参数文件名对文件进行排序
-n对文件按照数字排序
-r反向排序
uniq-参数文件名对文件去重,去重前需要使用排序
sort
-c显示数据重复的次数
split-参数文件名对文件进行切割
-100(每100行切割成一个文件)
-C25m/b/k(每25兆/字节/K分割成一个文件)
|管道,把上一条命令的结果传输给下一条命令
“>”和“>>”重定向写入文件中“>”相当于“w”清空并写入“>>”相当于“a”追加进文件
awk-F‘分割符' Pattern{action}文件名使用指定的字符对每一行数据进行分段,默认是空格(网站日志就是空格分开)
-F后面跟的是分隔符
pattern就是action执行的条件,这里可以使用正则表达式
$n即时第几段数据$0表示整行数据
NF表示当前记录的字段数
$NF表示最后一个字段
BEGIN和END,这两者都可用于pattern中,提供BEGIN和END的作用是给程序赋予初始状态和在程序结束之后执行一些扫尾的工作
bashshell.sh运行shell.sh脚本
dos2unixxxoo.sh将“\r\n”转换成“\n”Windows——>linux(由于Windows和Linux下的换行符不同,所以我们在Windows下面下的代码需要使用dos2unix转换成Linux下的换行符,否则运行shell脚本会报错)
unix2dosxxoo.sh将“\n”转换成“\r\n”linux——>Windows
rmxx.txt删除xx.txt文件
3、一些简单的命令符介绍到这里,需要了解shell,建议大家查看相关的书籍.
下面我们开始使用shell分析日志
1、切割百度的抓取数据(将文件切割出来对专门的爬虫数据进行处理能提高效率)
catlog.log|grep-i‘baiduspider'>baidu.log
2、网站状态码个数查询
awk‘{print$9}'baidu.log|sort|uniq-c|sort-nr
3、百度总抓取量
wc-lbaidu.log
4、百度不重复抓取量
awk‘{print$7}'baidu.log|sort|uniq|wc-l
5、百度平均每次抓取的数据大小(结果是KB)
awk‘{print$10}'baidu.log|awk‘BEGIN{a=0}{a+=$1}END{printa/NR/1024}'
6、首页抓取量
awk‘$7~/\.com\/$/'baidu.log|wc-l
7、某目录抓取量
grep‘/news/'baidu.log|wc-l
8、抓取最多的10个页面
awk‘{print$7}'baidu.log|sort|uniq-c|sort-nr|head-10
9、找出抓取的404错误页面
awk‘$9~/^404$/{print$7}'baidu.log|sort|uniq|sort-nr
10、找出抓取了多少js文件和文件抓取的次数
awk‘$7~/.js$/{print$7}'baidu.log|sort|uniq-c|sort-nr