日志分析
按某个字段过滤
需要分析tomcat的access log,找到错误码为404的请求是哪些:
> $ awk -F ' ' '$10==404{print $4,$8}' localhost_access_log.2019-07-11.txt
打印行号
awk '{print NR}'
打印整行
awk '{print $0}'
同时按URL和客户端IP统计
$ awk -F ' ' '{print $30}' test.log |sort |uniq -c|sort -rnk 1|awk -F ' ' '{print $2}' | while read line; do echo =======$line===========; grep $line test.log|awk -F ' ' '{print $40}'|sort|uniq -c|sort -rnk 1; done;
输出结果:
=======/abc===========
5 "10.xx.xx.236"
2 "10.xx.xx.238"
2 "10.xx.xx.237"
=======/xyz===========
1 "10.xx.xx.235"
awk 正则表达式匹配
shell脚本用到了一段awk,一时没看懂
awk '$1~/^abc$/{print $2}' /tmp/test.log
查了awk工具的介绍,关于正则表达式有一批博客不错:awk 系列:如何使用 awk 和正则表达式过滤文本或文件中的字符串。
但是没有$1~
的介绍,又搜索一番,总结如下:
‘$1~/pattern/action’ 表示$1匹配指定内容后才执行action,pattern是以$1作为输入,而不是整行作为输入。
sed进行字符替换
echo "\"123\"" |sed s/\"//g
sed命令的格式是sed s/oldstring/newstring/g
。