Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.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
检测匹配的范围-shell脚本_Shell_Unix_Awk_Logfile - Fatal编程技术网

检测匹配的范围-shell脚本

检测匹配的范围-shell脚本,shell,unix,awk,logfile,Shell,Unix,Awk,Logfile,我有一个文件a和B A包含日志条目 B包含一些行号,而这些行号又是一些特定的行号 引用日志文件 我有这样一个awk程序: echo "($(awk 'NR==1{r1=$1;next} NR>2{printf"||"} {printf"(NR>%d&&NR<%d)",r1,$1;r1=$1}' B))&&/mypattern/"| awk -f- A ---> (

我有一个文件a和B

  • A包含日志条目
  • B包含一些行号,而这些行号又是一些特定的行号
引用日志文件

我有这样一个awk程序:

echo "($(awk 'NR==1{r1=$1;next}
              NR>2{printf"||"}
              {printf"(NR>%d&&NR<%d)",r1,$1;r1=$1}' B))&&/mypattern/"|
  awk -f- A
       ---> (courtesy jeff y from stack flow )
echo“($(awk'NR==1{r1=$1;next}
NR>2{printf“| |”}
{printf”(NR>%d&&NR(来自堆栈流的jeff y)

“|”前面的部分生成要在文件A中搜索的范围。
例如:
(NR>385&&NR537&&NR539&&NR385&&NR)根据我的模式,文件A上的这个范围可能没有匹配项,其中as(
NR>539&&NR鉴于您在评论中的澄清,我将提出一个解决方案,该解决方案只需使用awk通过文件A一次,而不是试图提取并使用数字形式的行号和范围(文件B)在多个过程中:

awk '/Exception/ && !/ExceptionUnparseable date/ {
       haveEx="yes"; ex=$0; exDate=last; haveMatch=""}
     haveEx && /tms/ {
       haveMatch="yes"; print exDate; print ex; haveEx=""}
     haveMatch && /tms/ {print}
     {last = $0} ' FILE_A
或者,如果不需要查看与模式匹配的线条:

awk '/Exception/ && !/ExceptionUnparseable date/ {
       haveEx="yes"; ex=$0; exDate=last}
     haveEx && /tms/ {
       print exDate; print ex; haveEx=""}
     {last = $0} ' FILE_A

我仍然需要看到一个代码块,其中包含满足最终目标所需的确切输出。顺便问一下,最终目标是什么?最终目的是什么?最终产品。1.文件a--日志文件,文件B--日志文件中某些特定行的行号。(这些数字通过搜索文本从文件a中提取。)“异常”(并忽略一些不必要的匹配)。)2.通过使用文件B,我试图找出文本“tms”是否存在于两个范围之间。换句话说,我查找与tms单独相关的异常。出于上述目的,我给出了*行范围(这些范围来自文件B,上面有代码)*匹配模式*文件A作为awk的i/p。)现在开始匹配。下面给出完整的代码。grep-n“Exception”FILE|A | grep-v“exceptionunpassable date”| cut-d:“-f1>FILE|B echo”($(awk'NR==1{r1=$1;next}NR>2{printf(NR>%d&&NR我将从文件A中获取第385行和第537行。是的,但是如果您得到一行输出,比如说,告诉您tms匹配的唯一范围,比如说
385-537
,那么您将如何处理该输出?我也将从文件A和第384行获取第385行。像wise一样。1.响应异常f或者TMS应用程序2。异常发生的时间(上一行,在本例中是384)经过它。肯定至少需要10分钟!我会回来的。你帮了很多忙!你应该得到我的报酬!当然!我完全通过了snip(两个代码).算法是,搜索模式1,并有一个标记文本“是”。搜索模式2,并有tms和“是”。直到这部分被清除。但设置的最后一部分havex=”“分配last=$0是我不清楚的。我猜last是一个关键字。你正在将rwo值分配给它。在高潮时有点困惑。!。但它工作得很好。!!!
last
只是一个awk变量,用于存储以前的记录,以便它可用(用于设置exDate)当找到一个异常行时。是,我得到了“最后一个获取日期
awk'/exception/&&!/ExceptionUnparseable date/{haveEx=“是”;ex=$0;exDate=last;haveMatch=”“}haveEx&/tms/{haveMatch=“是”;print exDate;print ex;------>haveEx=“{last=$0}
haveEx=”“
停止代码为异常的每个“tms”行打印相同的日期+异常行(仅找到第一个“tms”)。