欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

日志过滤小工具

程序员文章站 2022-05-06 12:11:29
...
1.从全量日志中截断部分日志
#1.截取末尾10000行
tail -1000 /data/logs/hadoop/hadoop-dcadmin-zkfc-hadoop-180-010.log > cut1w.log
#2.按照时间范围截取日志
sed -n '/2019-08-09 01:59/,/2019-08-09 11:14:24/p' hadoop.log > cut10h.log
#3.搜索关键字截取日志
tail -10000 /data/logs/hadoop/hadoop-dcadmin-zkfc-hadoop-180-010.log | grep SERVICE_NOT_RESPONDING > cutservice.log
#4.正则匹配截取超过5000ms的rpc日志
cat hadoop-dcadmin-namenode-hadoop-180-030.log* | grep 'took 5[0-9][0-9][0-9] milliseconds' > nnSlowRpc5s.log
#5.正则匹配多个字符串
grep -E "varchar|Slow RPC" tempsql.sql >nnSlowRpc5s.log
#6.指定打印3-6行
sed -n '3,10p' hadoop-dcadmin-namenode-hadoop-180-010.log.1 //打印3~10行
2.sed列式选择筛选日志
如下csv文件内容:

"1234","jd_newmember","awktest-jDGoWzFjnfhryGX5AepcE","0.9999"
"1234","jd_newmember","awktest-jD5koAx9Jl8R-4SexpcrM","0.9999"
"1234","jd_newmember","awktest-Du5bjYaSN6TrxOIgfpw0","0.9999"
"1234","jd_newmember","awktest-jDoV83iydyKjTtPNgaCYM","0.9999"
"1234","jd_newmember","awktest-jDlN4vlz-mOzfDlr4pae4","0.9999"
需要选择出第三列,常规方法可以使用xls,选择第三列,然后批量替换掉双引号,用awk可以一次性完成。对于规律的用逗号分隔的可以用xls筛选列,当分隔符不规律时awk的强大就体现出来了,可以FS指定任意的分隔符。

#FS指分隔符 "," , $3是打印按照分隔符\",\"的第三列
awk 'BEGIN {FS="\",\""} {print $3}' test_JDnewmember.csv > jd_filter.csv
3.more、less日志翻页搜索
在简单的翻看Linux上的日志时也可以用more、less,翻页是Ctrl+f,前一页是Ctrl+b,搜索用斜杠/,跳转到下一个是n,基本上指令与vim的一致。

more hadoop-dcadmin-namenode-hadoop-180-010.log.1
4.替换内容
#1.替换行尾1个以上的空格
[ ^t]+$


#0.匹配1个或者多个空格
[ ^]+
#1.替换行尾1个以上的空格
[ ^]+$
#2.行首多个空格
^[ ^]+
#3.替换换行符和回车符,可以使用notepad++的“扩展”,常见的换行是由回车符合换行符一起组成 \r\n,有只包含\n。
\r\n
#4.匹配包含字符串“MemberLatestSmsTime”的整行。
^.*MemberLatestSmsTime.*$
#匹配连续数字+多个字符到行尾,'[0-9]+':多个连续数字,'.*':多个字符,'$':行尾。“eventHdfsBolt-30-36-1572491424981.txt 8144 bytes, 1 block(s),”
[0-9]+ bytes.*$
#当文件比较大,只能在Linux上面处理时可以用sed来批量替换
sed 's/long/field/g' select* > selectAll.xml //替换字符long为field
sed 's/tmp/UPDATE tasks/g' temp3.sql > temp4.sql //替换字符tmp为目标字符  
sed 's/^/Head/g' temp3.sql > temp5.sql //添加到行首  
sed 's/$/&TAIL/g' test.file //添加到行尾  
sed 's/`//1' temp08-final.sql > temp09-update.sql #替换第一个匹配的字符  
awk 'BEGIN{OFS=" "}{print $1,$2,$3,$4,$4 }' temp05.sql //指定输出域符号OFS为空格