2014-12-26 203 views
4

之前的字和線我有一個包含這樣多個條目的文本日誌文件:grep命令匹配

Processing input.jpg (323 of 500)... 
Detecting matches in region 1... 
Detecting matches in region 2... 
Detecting matches in region 3... 
Detecting matches in region 4... 
Detecting matches in region (n)... 
... 
NOT ENOUGH MATCHES - FULL FILE OUTPUT 
Processing input1.jpg (324 of 500)... 

我想用grep在文件中的順序完整的文件出現在哪裏每個實例相匹配,然後得到生成該結果的文件的名稱 - 即查找每個FULL FILE匹配前開始處理的行。

我該如何用grep或其他工具如sed或awk來做到這一點?

到目前爲止,我能夠以匹配完整的文件在日誌中找到的每個實例,並指望他們:

cat output.txt | grep "FULL FILE" | wc -l 

,但我需要從日誌文件前面的文件名,現在每場比賽。

任何幫助非常感謝。

回答

3

假設在文件名中沒有空格,awk將高達其

awk '/^Processing/{file=$2};/FULL FILE OUTPUT$/{print file}' output.txt 
+0

你不需要';'後'}' – Jotne

0

你也可以用sed如下:

sed -n '/FULL FILE OUTPUT/{ N;s/.*\nProcessing \(.*\) (.*).*/\1/p}' my_file 

匹配具有FULL FILE OUTPUT任何線,再乘下一行比賽結束後找到你的文件名。

+0

我不不認爲這有效;具體而言,他希望**「全文件輸出」行之前的「處理」行**;它是用於下一個文件之後的文件 –

0

可以實際上grep做到像你問....

首先提取剛剛開始Processing的線條和含FULL FILE但剔除掉所有其他的東西,我們不知道的長度的線。這樣你想要的文件名就在FULL FILE之前。

egrep "^Processing|FULL FILE" output.txt 

現在做另一grep,但得到 「滿檔」 前行使用-B1,然後取出FULL FILE

egrep "^Processing|FULL FILE」 output.txt | grep -B1 "FULL FILE" | grep "^Processing「