按分隔符分隔每个grep找到的记录
团队 我很少向日志文件抛出异常。Iam使用以下正则表达式从日志中派生所有异常和错误 现在,我想收集每个异常堆栈跟踪消息,前几行说10行,后10行。我可以通过添加-A 10-B 10来实现这一点,“但是”我希望每个这样的异常日志记录(前10行,异常跟踪,后10行)之间用“\n”或一些东西作为分隔符来分隔,这样我就可以分别收集这些块并在ui中显示。有什么帮助吗 grep“ERROR\| FATAL\| Exception\| at..java\:”my.log 提前谢谢!按分隔符分隔每个grep找到的记录,grep,Grep,团队 我很少向日志文件抛出异常。Iam使用以下正则表达式从日志中派生所有异常和错误 现在,我想收集每个异常堆栈跟踪消息,前几行说10行,后10行。我可以通过添加-A 10-B 10来实现这一点,“但是”我希望每个这样的异常日志记录(前10行,异常跟踪,后10行)之间用“\n”或一些东西作为分隔符来分隔,这样我就可以分别收集这些块并在ui中显示。有什么帮助吗 grep“ERROR\| FATAL\| Exception\| at..java\:”my.log 提前谢谢! 桑托什你可以这样做: #!
桑托什你可以这样做:
#!/bin/bash
N=10
pattern=xyz
matchinglines=($(awk -v p="$pattern" '$0~p{print NR}' logfile)) # Generate array of matching line numbers
for x in ${matchinglines[@]}
do
((start=x-N))
[[ $start -lt 1 ]] && start=1 # Avoid passing negative line numbers to sed
((end=x+N))
sed -ne "${start},${end}p" logfile
echo
done
或者您可以在
awk
中完成这一切:
awk '{r[FNR]=$0} /pattern/{w[++i]=FNR} END{for(j=1;j<=i;j++){for(k=w[j]-10;k<=w[j]+10;k++)if(k>0 && k<=FNR)print r[k];printf "\n"}}' logfile
awk'{r[FNR]=$0}/pattern/{w[++i]=FNR}END{for(j=1;jMark,我使用pattern(^[\tException])来检索堆栈跟踪,但我想要的是检索堆栈跟踪之前的10行,堆栈跟踪,堆栈跟踪之后的10行作为单个记录,然后显示这些记录中的每一行(我会注意这一点),当前它打印堆栈跟踪=================awk'{r[FNR]=$0}/^[\t异常]/{w[++i]=FNR}结束{for(j=1;jI不能很容易地从中看出发生了什么。请尝试使用一个非常小的awk
命令,就像下面的命令一样,这样我们可以得到一些有效的东西,然后在它的基础上构建,直到它达到您想要的效果…awk'/Exception/{print}my.log