2012-12-19 86 views
3

我是新的在Linux SO和bash命令,我認爲有更多經驗的人可以幫助我。我想比較的執行日誌的2個不同的文本文件,但有些線路(不是全部)與時間」令牌像這樣開始:比較執行日誌的忽略執行時間

12345 ps line 1 content 
23456 ps line 2 content 
line 3 content 
345 ps line 4 content 

這些令牌在每個日誌不同的值,但是,在那個比較,我不關心他們,我只想比較線條的內容而忽略它們。我可以使用'sed'命令來生成沒有這些令牌的新文件,然後將它們與它們進行匹配,但是我假裝反覆這樣做,如果我只使用一個命令或一個sh文件,可以節省一些時間。我試圖使用'sed'和'diff'相結合,但沒有成功。請有人能幫助我嗎?

回答

7

您可以使用下面的sed一個襯墊從文件的開頭刪除的數字:

sed 's/^[0-9]* ps//g' file1 

把分差兩個這樣的文件(減去時間戳),可以使用process substitution

diff <(sed 's/^[0-9]* ps//g' file1) <(sed 's/^[0-9]* ps//g' file2) 
+0

完美的作品!非常感謝你cmh! – Felipetto

+0

也感謝關於[進程替代]的信息(http://tldp.org/LDP/abs/html/process-sub.html)!這在我日常的工作中會非常有用。 – Felipetto

0

未經檢驗的,因爲你沒有顯示2個輸入文件和預期輸出但從你的描述,我認爲這會做你想要什麼:

awk ' 
    { sub(/^[[:digit:]]+[[:space:]]*/,"") } 
    NR==FNR { file1[FNR] = $0; next } 
    { print ($0 == file1[FNR] ? "==" : "!="), $0 } 
' file1 file2 

如果不這樣做,後一些小樣本輸入和預期輸出。