0

我有一个日志文件,该文件全天不断被写入。我需要一种方法来检查日志文件,并找到与特定字符串匹配的最后一个条目。

该条目可能是从末尾算起的 5 行或 5000 行。

我不愿意阅读整个日志(到一天结束时可能超过 60000 行)。

我也不想取出所有匹配的条目然后获取最后一个,因为当事情运行时,匹配的条目可能占日志的三分之一。

到目前为止,我能找到的一切要么是关于使用Select-String将所有匹配项放入一个数组中,然后获取最后一个,要么是使用(Get-Content xxx) [-1..-x]来获取最后 x 行。两者都不是我需要的。

到目前为止,我管理的最接近的是:

$fullResult = (Get-Content $location)[-1 .. -5000] | 
                    Select-String -Pattern $srch -List |
                    Select-Object -First 1

但这并不完美,因为它只读取最后 5000 行,如果我追求的结果在第 5001 行,它将失败。

4

1 回答 1

1

简单地使用Where-Object过滤器有什么问题吗?

Get-Content $location |
  Where-Object { $_ -match $srch } |
  Select-Object -Last 1
于 2015-07-13T11:57:32.847 回答