从文件中的特定行以相反的顺序对文件进行Grep

宾格勒宾格勒

我有这种日志

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并且该行包含故障通知,我们将为同一线程打印所有先前记录的审核行
  • 在哈希中添加新的审计行时,我们会删除所有先前的审计行(请参见splice

换句话说,我们按线程名称存储所有审核行,并为每个失败的审核打印先前的行。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

按特定顺序对文件进行排序

在Go中按数字顺序对文件进行排序

对文本文件中的特定行使用grep

按数字顺序对文件进行排序

使用grep的结果对文件进行排序

在Android中按字母顺序对文件列表,文件夹和文件进行排序

如何对文件中的特定信息进行排序

使用awk对文件中的特定列进行分组

以相反的行顺序打印文件内容

在同时对文本文件进行某些操作之后,如何删除该文本文件中的特定行

对文件进行grep时,grep返回true而不是行,为什么?

多次复制文件,写入重复的文件,对文件进行排序,排序后计算特定行的位置

以相反的顺序读取文件

使用字符串值按特定顺序对文件内容进行排序

如何使用python按特定顺序对文件名进行排序

在C中按字母顺序对文件中的结构进行排序

如何使用gedit按字母顺序对文本文件中的行进行排序

使用Python中的第二列按字母顺序对文本文件进行排序

如何在Hive中对文件进行重复数据删除并保持原始排序顺序?

如何使用Winzip命令行对文件夹中的特定文件进行ZIP压缩?

仅按姓氏字母顺序对文件进行排序

如何以排序顺序对文件进行tar处理?

在处理之前按字母顺序对文件进行排序

如何按字母顺序对文件进行排序?

对文件中的各行进行排序

对文件中的某些行进行排序

对文件中的某些信息进行排序

对文件php中的数据进行排序

对文件中的列表进行排序