使用shell命令查看分析日志(2)

6 篇文章 0 订阅
5 篇文章 0 订阅

目标:

查看日志文件中,所有空指针异常发生的位置,及前后10行,

前10行是为了看到请求的详细信息(接口 ,参数等),

后10行是为了查看异常发生的代码行号,定位代码bug.

 

命令:

grep -rnw "java.lang.NullPointerException" house_error.log |cut  -d ':' -f 1 |xargs -n1 -i expr  {} + 10 |xargs -i awk '{if(NR>={}-16 && NR<={})print NR":"$0;if(NR=={}) print "\n\n" }'  house_error.log

命令解释: 



 

命令执行结果:



 

 

awk 中:

$0:表示整行;
$1:表示以分隔符分割之后的第一个字段(域);
$2:表示以分隔符分割之后的第二个字段(域);
分隔符:默认是空格,换行,\Tab

 

awk的内置常量

在awk中有很多的系统变量,这些系统变量在我们编写awk脚本的时候会经常使用到,我现在将经常使用到的系统变量列举出来,并做简要说明。

变量名描述举例
$0当前记录内容awk '{print $0}'
$1~$n分别保存着当前记录的字段1到字段n的内容awk '{print $1, $2, $3}'
FS字段的分隔符,默认是空格或Tabawk 'BEGIN{FS=":"}{print $1,$3,$6}' /etc/passwd
NF记录当前记录中的字段个数awk '{print $0} END{printf("Total Field(s):%d\n", NF)}' 201509.log
NR已经读出的行数,从1开始计数;对于多个文件的情况下,该值会持续累加awk '{print NR}' 201508.log 201509.log
FNR对于当前处理的文件来说,已经读出的行数;对于多个文件的情况下,该值是各个文件独自对应的行号awk '{print FNR}' 201508.log 201509.log
RS输入的记录分隔符, 默认为换行符awk 'BEGIN{RS=" "}{print FNR}' 201508.log
OFS输出字段分隔符, 默认也是空格awk 'BEGIN{OFS="\t"}{print $1, $2, $3}' 201509.log
ORS输出的记录分隔符,默认为换行符一般用的很少,此处不举例说明了
FILENAME当前输入文件的名字awk '{print FILENAME}' 201509.log

 

 

注意事项:

expr 算术运算中,运算符两边必须有一个空格

 

参考:

https://www.tuicool.com/articles/2mqmYbe

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值