2010-09-24 22 views
2

我有一個非常混亂的簡單日誌文件,我需要它整潔。該文件包含日誌標題,但都混雜在一起,因此我需要根據日誌標題對日誌文件進行排序。沒有靜態數量的行,意味着文本文件的每個標題沒有固定的行數。我正在使用AWK來分類標題。如何在複雜文本文件中喚醒段落?

日誌文件是這樣的:

Car LogFile Header 
<text> 
<text> 
<text> 
Car LogFile Header 
<text> 
Car LogFile Header 
<and so forth> 

這將這樣的輸出:

Car LogFile Header 
<text> 
<text> 
<text> 
------------------- 
Car Logfile Header 
<text> 
<text> 

我已經做了/搜索一個簡單的代碼,但它似乎並不奏效。有人能指導我嗎?謝謝!

#!/bin/bash 

# usage: pargrep <infile> <searchpattern> 

inFile="$1" 
searchString="$2" 

awk ' 
BEGIN { 
    FS="\n" 
    RS="-----" 
} 
/'"$searchString"'/ { print } 
' ${inFile} 
+0

「它似乎沒有工作」是不是很豐富。它的行爲與你期望的行爲有什麼不同?你得到了哪些錯誤信息? – 2010-09-24 02:05:04

+0

awk:cmd。line:6://root/Desktop/Default.log/ {print} awk:cmd。line:6:^語法錯誤 awk:cmd。line:6:/ /root/Desktop/Default.log/ {print} awk:cmd。line:6:^ unterminated regexp「 – JavaNoob 2010-09-24 02:24:44

+0

如果你能讓我們取樣輸入和預期輸出,那將是一件好事。謝謝 – dogbane 2010-09-24 07:24:04

回答

2

最好使用變量傳遞而不是試圖獲得複雜的引用權。

#!/bin/bash 

# usage: pargrep <infile> <searchpattern> 

inFile="$1" 
searchString="$2" 

awk -v selector=$searchString ' 
    BEGIN { 
     FS="\n" 
     RS="-----" 
    } 
    selector ~ $0 { print } 
    ' "${inFile}" 
+0

現在它給了我錯誤的「 awk:cmd。line:3:fatal:無法打開文件'pargrep'進行閱讀(沒有這樣的文件或目錄)「.....有什麼想法?由於額外的使用情況調用,是否有這個問題? – JavaNoob 2010-09-24 02:23:34

+0

@JavaNoob:這聽起來像是對我缺少引號。 – 2010-09-24 05:24:29

+0

它仍然沒有工作.... – JavaNoob 2010-09-24 05:27:25

2

扭捏丹尼斯的回答有點:

awk -v selector="$searchString" ' 
    BEGIN { 
     RS = "Car LogFile Header\n" 
     ORS = "------" 
    } 
    selector ~ $0 { 
     print RS $0 
    } 
' "${inFile}" 

注意RS輸入記錄分隔符。我用ORS來說明。

我假設「Car LogFile Header」是不變的。如果這是動態的,請告訴我們。