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:排序时,除了040至176之间的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