linux命令sed, awk日志统计

awk一行数据的部分属性去重统计

awk '{print $7}' base.20180514.log | grep 'keyword' | awk -F '?' '{print $2}' | awk -F '&' '{print $1}' | uniq

sed统计一个时间段的日志数量

sed -n '/2018-05-16 21:00:00/, /2018-05-16 22:30:00/p' base.20180516.log | grep 'keyword' | wc -l

sed统计一个时间段的请求日志,请求次数第二的url及次数

sed -n '/2018-06-02 17:05:19/, /2018-06-02 17:09:19/p' request.20180602.log | awk -F ':' '{print $8}' | awk -F '?' '{print $1}' | awk -F ' ' '{print $1}' | sort | uniq -c | sort -nrk 1 | head -n 2 | tail -n 1

sort 参数列表

-b:忽略每行前面开始出的空格字符;
-c:检查文件是否已经按照顺序排序;
-d:排序时,处理英文字母、数字及空格字符外,忽略其他的字符;
-f:排序时,将小写字母视为大写字母;
-i:排序时,除了040176之间的ASCII字符外,忽略其他的字符;
-m:将几个排序号的文件进行合并;
-M:将前面3个字母依照月份的缩写进行排序;
-n:依照数值的大小排序;
-o<输出文件>:将排序后的结果存入制定的文件;
-r:以相反的顺序来排序;
-t<分隔字符>:指定排序时所用的栏位分隔字符;
+<起始栏位>-<结束栏位>:以指定的栏位来排序,范围由起始栏位到结束栏位的前一栏位

uniq 参数列表

 -d, --repeated          //只输出重复的行  
 -D, --all-repeated      //只输出重复的行,不过有几行输出几行  
 -f, --skip-fields=N     //-f 忽略的段数,-f 1 忽略第一段  
 -i, --ignore-case       //不区分大小写  
 -s, --skip-chars=N      //根-f有点像,不过-s是忽略,后面多少个字符 -s 5就忽略后面5个字符  
 -u, --unique            //去除重复的后,全部显示出来,根mysql的distinct功能上有点像  
 -z, --zero-terminated   end lines with 0 byte, not newline  
 -w, --check-chars=N      //对每行第N 个字符以后的内容不作对照  
 --help              //显示此帮助信息并退出  
 --version              //显示版本信息并退出  

参考文档
1 http://www.gnu.org/software/gawk/manual/gawk.html#Getting-Started

你可能感兴趣的:(shell,日志分析)