2016-01-22 31 views
0

我有幾百個日誌文件,用於成功和一些不成功的作業。所有不成功的作業都有「不可翻譯」的字眼,所以我可以使用這個命令輕鬆找到所有的文件。使用diff和fgrep查找日誌中的類似錯誤

grep untranslatable * 

所以,現在,我發現所有這些文件,我試圖找出還有什麼這些文件的共同點,但我也試圖排除所有存在於該行的成功的日誌文件。

我已經試過這些:

diff --changed-group-format='%<' --unchanged-group-format='' 20160120142000_xxx_xxx_xxx_xxx_fexp.log 20151214153516_yy_yyy_yyy_yyy_yyy_yyy_hist.dat.log | fgrep -x -f 20160120142000_xxx_xxxx_xxx_xxxx_xxx.log 20150904115502_zzz_zzzz_zzzzz_zzzz_fexp.log | grep untranslatable 

diff --changed-group-format='%<' --unchanged-group-format='' 20160120142000_xxx_xxxx_xxx_xxx_fexp.log 20151214153516_cc_ccc_ccc_cccc_cccc_cccc_cccc.dat.log |grep untranslatable 


fgrep -x <(diff --changed-group-format='%<' --unchanged-group-format='' 20160120142000_EMD_APPN_FEE_DETL_fexp.log 20151214153516_TD_EXT_LPS_PROC_MGMT_FORM_hist.dat.log) <(diff --changed-group-format='%<' --unchanged-group-format='' 20150904115502_smr_sale_price_type_fexp.log 20151214153516_TD_EXT_LPS_PROC_MGMT_FORM_hist.dat.log) 

將是最好的途徑是什麼,如果我問的是可能的嗎?我不知道正則表達式,但如果這會有所幫助,我可能會閱讀它。

例子:

的每個文件,成功與否包含文本的此塊。

563  ======================================================================== 
564  =                  = 
565  =   Logoff/Disconnect           = 
566  =                  = 
567  ======================================================================== 
568 **** 14:20:55 UTY6215 The restart log table was not dropped by this task. 
569 **** 14:20:57 UTY6212 A successful disconnect was made from the RDBMS. 
570 **** 14:20:57 UTY2410 Total processor time used = '0.11 Seconds' 
571  .  Start : 14:20:23 - WED JAN 20, 2016 
572  .  End : 14:20:57 - WED JAN 20, 2016 
573  .  Highest return code encountered = '12'i. 

我不想看到這個,因爲它與這些類型的模塊的其餘一起,使它真的很難找到有問題的線路。

每個不成功的文件包含了這一點,但是:

14:20:54 UTY8713 RDBMS failure, 6706: The string contains an untranslatable 
560  character. 

但是,僅此是不夠的,發現問題。這些日誌每個都是600線。我需要找出我在哪裏嘗試閱讀我的日誌中的這個不可翻譯的字符,因此我可以相應地更改我的查詢。噪聲過濾後讀取日誌會更容易。 (我正在閱讀的文件長達數百萬行,所以我試圖不去看那裏)

我意識到我可能在這裏要求一個魔術。

我並不想透露太多關於這些日誌的信息,所以一種方法已經足夠好了。我可以弄明白。

感謝,

馬茲

+0

*在任何*線測試*任何*成功的日誌文件都希望從失敗的日誌文件中排除?排除所有其他行之後,您想要在一對失敗的日誌文件之間進行區分?如果不是,你能更好地解釋*完全*你想要什麼? –

+0

我試圖去除成功和不成功的日誌共有的噪音,所以你是正確的。 – Maz

+0

如果你真的*表示你想要過濾出**任何**成功文件中的每一行**,並且只顯示失敗文件中的**其他**行,那麼這很簡單,但時間戳記正在使匹配複雜化,除非你可以定義「區域」來忽略或模式化等等。你需要提供更多關於事物的具體信息。 –

回答

0

您可以使用此

find . -name "*.log" -type f -exec grep -n -l "untranslatable" {} \; 

這將顯示所有包含 「不可譯」 字樣的文件。

問候 克勞迪奧

+0

我已經解決了這個部分。我試圖找出他們有什麼共同點,同時過濾成功的日誌也有。 – Maz

+0

可否請您寫一個例子,說明如何輸出日誌,哪個輸出是你想要的?我想你需要編寫一個腳本 – ClaudioM

+0

編輯我的文章。 – Maz

0

當你想篩選出使用被認爲在succesfull日誌線在不成功的日誌行,你需要與過濾器信息的文件。
從大量成功的日誌開始:cp log.ok filter.txt
在filter.txt中,您將有行號和id在過濾時不匹配。因此,在這樣一種方式,清潔線可以匹配過程中可以使用編輯filter.txt: 翻譯

563  ======================================================================== 
564  =                  = 
565  =   Logoff/Disconnect           = 
566  =                  = 
567  ======================================================================== 
568 **** 14:20:55 UTY6215 The restart log table was not dropped by this task. 
569 **** 14:20:57 UTY6212 A successful disconnect was made from the RDBMS. 
570 **** 14:20:57 UTY2410 Total processor time used = '0.11 Seconds' 
571  .  Start : 14:20:23 - WED JAN 20, 2016 
572  .  End : 14:20:57 - WED JAN 20, 2016 
573  .  Highest return code encountered = '12'i. 

======================================================================== 
=                  = 
=   Logoff/Disconnect           = 
The restart log table was not dropped by this task. 
A successful disconnect was made from the RDBMS. 
Total processor time used = 
.  Start : 
.  End : 
.  Highest return code encountered = 

現在開始grep -vf filter.txt log.nok