Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
按分隔符分隔每个grep找到的记录_Grep - Fatal编程技术网

按分隔符分隔每个grep找到的记录

按分隔符分隔每个grep找到的记录,grep,Grep,团队 我很少向日志文件抛出异常。Iam使用以下正则表达式从日志中派生所有异常和错误 现在,我想收集每个异常堆栈跟踪消息,前几行说10行,后10行。我可以通过添加-A 10-B 10来实现这一点,“但是”我希望每个这样的异常日志记录(前10行,异常跟踪,后10行)之间用“\n”或一些东西作为分隔符来分隔,这样我就可以分别收集这些块并在ui中显示。有什么帮助吗 grep“ERROR\| FATAL\| Exception\| at..java\:”my.log 提前谢谢! 桑托什你可以这样做: #!

团队

我很少向日志文件抛出异常。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