linux - 在多行错误日志中搜索错误代码,然后在 Linux 上搜索其中的一些参数

标签 linux awk sed grep

对于一个非常大的日志文件中的每个错误代码实例,什么命令会给我所需的输出?该文件包含以字符数开头和结尾标记的记录。如:

SR 120
1414760452  0   1   Fri Oct 31 13:00:52 2014    2218714 4
    GROVEMR2    scn
../SrxParamIF.m     284

New Exam Started

EN 120

第 5 个字段是错误代码,在前面的例子中是 2218714。

我想只用 grep 查找错误代码,然后输出 -A 行;然后从中选择我需要的而不是解析整个文件。这看起来很简单,但我的 grep/awk/sed 用法没有达到那个水平。

仅当遇到错误 2274021 时,如以下示例所示,我想要一些输出,如图所示。

显示如下输出:egrep ‘Coil:|Connector:|Channels faulted:|第一 channel :’ERRORLOG|less

感兴趣的部分输入文件:

Mon Nov 24 13:43:37 2014        2274021 1
        AWHMRGE3T       NSP
SCP:RfHubCanHWO::RfBias         4101
^MException Class: Unknown   Severity: Unknown
Function: RF: RF Bias
PSD: VIBRANT   Coil: Breast SMI   Scan: 1106/14
Coil Fault - Short Circuit
A multicoil bias fault was detected.
.
Connector: Port 1 (P1)
Channels faulted: 0x200
First channel: 10 of 32, counting from 1
Fault value: -2499 mV, Channel: 10->

输出:

Coil: Breast SMI
Connector: Port 1 (P1)
Channels faulted: 0x200
First channel: 10 of 32, counting from 1

在此先感谢您的指点!

最佳答案

尝试以下操作(使用方便的改编)

#!/usr/bin/perl

use strict;
$/="\nEN ";                               # register separated by "\nEN "
my $error=2274021;                        # the error!
while(<>){                                # for all registers
  next unless /\b$error\b/;                   # ignore unless error
  for my $line ( split(/\n/,$_)){
     print "$line\n" if ($line =~ /Coil:|Connector:|Channels faulted:|First channel:/);
  }
  print "====\n"
}

这是你需要的吗?

关于linux - 在多行错误日志中搜索错误代码,然后在 Linux 上搜索其中的一些参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27118925/

相关文章:

regex - 删除额外的管道(使用 sed 或 tr)

linux - 流式传输文件内容直到遇到子字符串

Linux 命令行到 Windows "ls"

linux - 在每个 bash 创建一个命令后在 screen 上运行命令

c - Linux-C : reading from pipe returns first buffer written to it

awk - 如何根据另一列的长度(使用 awk)将一列的内容拉伸(stretch) n 倍?

linux - 如何使用部分文件名查找在目录中最新创建的 .gz 文件的文件名

linux - 在目录中找到文件名的匹配项

vim - 在 Vim 中用恒等运算符 (===) 替换相等运算符 (==)

linux - 如何在 Linux PHP 应用服务上全局安装 Composer?