我有这种日志
2019-11-14T20:03:48.917Z INFO Thread1 Audit ... Operation status="success" ... id=dad69655-07d0-4daf-a639-b8e3257fa6bd msg...
2019-11-14T20:03:48.908Z INFO Thread Audit Operation status="success" ... id=67ab8c3b-b57c-4328-b483-81582be0341d msg...
2019-11-14T20:03:48.909Z INFO Thread Audit ... Operation status="success" ... id=b0485887-004a-4f55-b287-f5c9cf609787 msg...
2019-11-14T20:03:48.911Z INFO Thread2 Audit ... Operation status="success" ... id=35ca8c14-757f-474a-a929-494781c4679f msg...
2019-11-14T20:03:48.915Z INFO Thread2 Audit ... Operation status="failure" ... id=72f73c66-da37-11e9-8d68-005056bce6a5 msg...
2019-11-14T20:03:48.917Z INFO Thread1 Audit ... Operation status="success" ... id=26ece804-da3a-11e9-bfed-005056bce25b msg...
2019-11-14T20:03:48.919Z INFO Thread Not ... Operation status="failure" ... id=1b31f53f-66d5-475f-ace3-ed1905e8f818 msg...
2019-11-14T20:03:48.921Z INFO Thread Not ... Operation status="success" ... id=84ee4947-633f-4ccb-832e-7b380052401c msg...
2019-11-14T20:03:48.948Z INFO Thread Audit ... Operation status="failure" ... id=26ece804-da3a-11e9-bfed-005056bce25b msg...
2019-11-14T20:03:48.950Z INFO Thread Audit ... Operation status="success" ... id=8837cb5f-48f5-49db-8ade-a47b96527501 msg...
...
表示这之间可以有任何东西,...
有时也可以有一个空白。
msg...
表示id并不总是在行尾,msg...
有时也可以为null。
实际上,这很复杂,但是基本结构是这样。
输入-我的输入是给定的ID。
和
条件-条件是查看包含该ID的日志行,该ID的OPstatus失败并且属于Audit类。
找到此日志行后,选择它的线程并获取该线程的所有日志,直到该线程的先前Audit日志为止。
因此,输入是给定的日志行和id = 26ece804-da3a-11e9-bfed-005056bce25b
。
我期望的输出是这个
2019-11-14T20:03:48.909Z INFO Thread Audit ... Operation status="success" ... id=b0485887-004a-4f55-b287-f5c9cf609787
2019-11-14T20:03:48.919Z INFO Thread Not ... Operation status="failure" ... id=1b31f53f-66d5-475f-ace3-ed1905e8f818 msg...
2019-11-14T20:03:48.921Z INFO Thread Not ... Operation status="success" ... id=84ee4947-633f-4ccb-832e-7b380052401c msg...
2019-11-14T20:03:48.948Z INFO Thread Audit ... Operation status="failure" ... id=26ece804-da3a-11e9-bfed-005056bce25b msg...
我试过的是-
awk '{if($0~/.*Audit.*26ece804-da3a-11e9-bfed-005056bce25b.*/) system("grep -w " $3 " " FILENAME "| sed \"0,/.*Audit.*Operation status="success".*/d\" | sed \"/Operation status="failure"/{n;d;}\"" )}' file.log
请帮忙!
Perl进行救援!
perl -lane 'push @{ $h{ $F[2] } }, $_;
if ("Audit" eq $F[3]) {
print join "\n", "", @{ $h{ $F[2] } } if /status="failure"/;
splice @{ $h{ $F[2] } }, 0, -1;
}' -- file.log
-n
逐行读取输入-l
从输入中删除换行符并将其添加回输出-a
将空格上的输入拆分为@F
数组$F[2]
)$F[3]
是Audit
并且该行包含故障通知,我们将为同一线程打印所有先前记录的审核行换句话说,我们按线程名称存储所有审核行,并为每个失败的审核打印先前的行。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句