2017-04-26 61 views
1

返回行號我有全天附加到一個非常大的日誌文件(最大1GB)。在這個日誌中有很多我想要搜索的字符串(我已經可以使用Select-String了),但是我在每次掃描時掃描整個文件,效率低下,而且不必要。PowerShell的 - 有效途徑從日誌

理想我想只掃描最後5分鐘的日誌在每次掃描這些字符串。不幸的是,並不是日誌文件的每一行都包含一個時間戳。我最初想到在最後5分鐘的時間戳中使用通配符select-string,結合感興趣的字符串將錯過一些事件。此刻我唯一的其他想法是確定感興趣的行號,$FromLineNumber(當前系統時間前5分鐘)和$ToLineNumber(日誌文件的最後一行數字),然後只Select-String兩者之間的行號範圍。

作爲一個例子,到線50和日誌的最後線之間進行搜索。我能夠返回$FromLineNumber的行號,但我正在努力抓取$ToLineNumber作爲最後一行日誌。

問:如何只返回一個日誌文件的最後一行的行號?

到目前爲止,我曾嘗試與Get-Content $path -tail -1(對象類型行號)返回此然而,這總是返回空值,即使有各種開關和變化。我只能通過Select-String cmdlet返回行號,但是我沒有使用與日誌的最後一行相關的特定字符串。我是否按照其原始設計濫用了此cmdlet,如果有的話......是否還有其他替代方法可以返回最後一個行號?

繼續...一旦我決定了行號範圍之間的搜索我會隔離
$FromLineNumber$ToLineNumber第一間使用獲取內容環路這些行向下篩選到這個較小的選擇,然後管這種成選擇字符串還是有更高效的方法來實現這一點?我懷疑成千上萬條線路的循環​​需要資源,所以我很想知道是否有更好的方法。

+1

「可惜不是日誌文件的每一行包含時間戳」你能告訴我們這個不尋常的日誌文件的樣本?要獲得最後一行代碼,您可能會使用Get-Content。\ file.log | Select-Object -Last 1 -ExpandProperty ReadCount'獲得成功,但仍需要確定從哪一行開始 –

+1

不確定是否你故意拖尾「減1」;你應該是'Get-Content $ path -Tail 1'(正1)來獲得最後一行。這應該是快速的,所以如果你能猜測你的5分鐘將在最後100行或1000行內,並且被大量線條超調,那麼這可能比其他方法更容易和更快。否則,請使用文件閱讀器並退出文件末尾,反向處理行,直到您在5分鐘前找到日期時間,然後停止。你不斷提及行號; Select-String顯示它們,但Get-Content不能使用它們 – TessellatingHeckler

+0

Get-Eventlog有一個-after參數,它應該能夠實現。如果日誌文件具有事件日誌文件的格式,則可以並且應該使用此cmdlet。如果它有其他形式,爲什麼呢? –

回答