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