我需要匹配并从日志中提取带有pattern1的行,该日志应该位于另一个pattern2匹配的行之后: 例如,日志包含如下数据:
00:00:01 Computing CDA.
00:01:10 Trying to open errorLog1.
00:01:12 writing errorLog1.
00:01:13 Trying to open outLog1.
00:01:14 writing outLog1.
00:01:15 Processing Complete!
00:01:16 Validating documents.
00:02:14 Trying to open errorLog2.
00:02:12 writing errorLog2.
00:02:13 Trying to open outLog2.
00:02:14 writing outLog2.
00:02:15 Processing Complete!
我需要计算文档验证所用的时间(第一列)。所以我想用“验证文档”字符串和“处理完成”字符串检索该行以提取时间并获得差异。 这可能很简单,但我无法找到解决方案。
答案 0 :(得分:1)
这应该有效:
if ($subject =~ m/(\d{2}:\d{2}:\d{2}) Validating documents\..*?(\d{2}:\d{2}:\d{2}) Processing Complete!/s) {
$start = $1;
$end = $2;
# Calculating the time difference is left as an exercise :)
}
答案 1 :(得分:0)
perl -lane '$a=$F[0] if(/Validating documents/);if(/Processing Complete/){print $F[0]-$a}' your_file
我在代码中只提到了$F[0]-$a
,但它不是计算时间的方式。但是这是你工作和计算时差的部分。$F[0]
保留了时间。在行