2013-05-10 57 views
0

我需要匹配,並提取一個符合從日誌應落入另一個PATTERN2匹配線之後的模式1的第二模式匹配: 例如日誌具有像這樣的數據:Perl的正則表達式:基於所述第一個

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! 

我需要計算文件驗證所用的時間(第一列)。所以我想用「驗證文檔」字符串和「處理完成」字符串來提取時間並獲取差異。 這可能是一個容易的,但我無法找出解決方案。

回答

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 :) 
} 
+0

(假設您已將整個文檔讀入一個名爲'$ subject'的單個字符串)。 – 2013-05-10 06:03:06

0
perl -lane '$a=$F[0] if(/Validating documents/);if(/Processing Complete/){print $F[0]-$a}' your_file 

我只是在代碼中提到$F[0]-$a但它不是這樣的時間calculated.But那就是你有工作和計算時間差的部分。 $F[0]保存在該行中遇到處理完成的時間

+0

$ F [0]返回兩個不同的「處理完成時間」,而我在「驗證文檔」語句後需要時間。如果(/ Validating documents /); if(/ Processing Complete /){print $ F [0] if(/ Validating documents /); if(/ Processing Complete /){print $ F [0] ],$ a}'input_file #slightly modified。但輸出如下:00:01:15 00:02:1500:01:16 – Freeman 2013-05-14 06:13:00