2014-01-15 86 views
0

我有一個巨大的日誌文件(大約10MB - 20000行),其中包含使用批處理從日誌文件中導出過濾行命令

081741.397 : Received:[8=FIX.4.4  9=68  35=0  34=157  49=CALUAT  52=20131216-08:17:41.239  56=FAUAT  10=232  ] 
081749.587 : Send:[8=FIX.4.4  9=64  35=0  49=FAUAT  56=CALUAT  34=158  52=20131216-08:17:49  10=033  ] 
081806.623 : Send:[8=FIX.4.4  9=583  35=AE  49=FAUAT  56=CALUAT  34=159  52=20131216-08:18:06  571=7CG8I6220131216  487=2  150=F] 
081811.396 : Received:[8=FIX.4.4  9=68  35=0  34=158  49=CALUAT  52=20131216-08:18:11.239  56=FAUAT  10=231  ] 
081815.920 : Send:[8=FIX.4.4  9=626  35=AE  49=FAUAT  56=CALUAT  34=160  52=20131216-08:18:15  571=9CG8IF220131216  487=2  150=F] 
081824.173 : Send:[8=FIX.4.4  9=558  35=AE  49=FAUAT  56=CALUAT  34=161  52=20131216-08:18:24  571=11CG8I220131216  487=0  150=F] 
081841.395 : Received:[8=FIX.4.4  9=68  35=0  34=159  49=CALUAT  52=20131216-08:18:41.239  56=FAUAT  10=235  ] 
081858.539 : Send:[8=FIX.4.4  9=64  35=0  49=FAUAT  56=CALUAT  34=169  52=20131216-08:18:58  10=036  ] 
081911.394 : Received:[8=FIX.4.4  9=68  35=0  34=160  49=CALUAT  52=20131216-08:19:11.239  56=FAUAT  10=225  ] 
081919.303 : Send:[8=FIX.4.4  9=640  35=AE  49=FAUAT  56=CALUAT  34=170  52=20131216-08:19:19  571=27CG8J220131216  487=2  150=F] 
081941.393 : Received:[8=FIX.4.4  9=68  35=0  34=161  49=CALUAT  52=20131216-08:19:41.239  56=FAUAT  10=229  ] 

我想只獲取包含Send:和這些行下面的示例數據行35=AE。我應該在批處理文件中使用哪種正則表達式來提取僅過濾的行並將它們導出到單獨的日誌文件中。

+0

要刪除發送或只希望看到的發送 - 我能爲你做一個正則表達式,當你明確 – owen79

+0

是否'35上的任何行= AE'出現不'發送:'就可以了? – foxidrive

+0

@ owen79 - 只想過濾發送並將其導出到文本文件 –

回答

2

這將查找的字符串「發送:」後面的任何字符SQUENCE和字符串「35 = AE」,讀取指定的輸入文件和輸出發送到指定輸出文件

findstr /r /c:"Send:.*35=AE" inputFile > outputFile 

要獲得除了指定的所有線路,增加/v到的findstr參數列表可以反轉匹配

編輯:刪除<轉向器dbenham的解釋(在FINDSTR錯誤)

+0

@PankajJaju ,在這種情況下並不是真的需要。只是一種習慣。不要求findstr打開要讀取的文件,而是要求cmd打開文件並將其提供給findstr。 –

+0

問是因爲當我嘗試它時,記錄被正確導向到一個新文件。但是這個命令沒有完成。 –

+2

@PankajJaju - 在XP和Windows 7上有一個FINDSTR錯誤,導致它在搜索重定向輸入時掛起,並且最後一行錯誤判斷一個新行字符。將文件的名稱作爲參數傳遞,並讓FINDSTR打開它而不是使用重定向。請參閱[Windows FINDSTR命令的未記錄的功能和限制是什麼?](http:// stackoverflow。com/q/8844868/1012053)FINDSTR「特殊性」的長長列表 – dbenham

0

要只得到行與發送和35 = AE使用

^\d{6}.\d{3} : Send.*35=AE.* 
1

您的問題不清楚。

如果你想獲得那些同時含有這些字符串的線條,然後

find "Send:" filename|find "35=AE" >a_new_file.txt 

如果你想獲得這些線路,這些字符串不是,那麼

findstr /L "Send: 35=AE" filename >a_new_file.txt 

在這兩種情況下, ,如果需要,可以添加一個/i開關以使搜索不區分大小寫。

1

試試這個

findstr /R /I Send:\[.*35=AE.* search.log >> new.log 
1

你可以使用以下方法來找到行並將其發送到新的文件

FINDSTR發送。* 35 = AE A.TXT> b.txt

1

這是另一種選擇,基於35=AE是一個獨特術語的評論。

find "35=AE" <"file.log" >"out.txt"