我有一个日志文件,全天不断写入。我需要一种方法来检查日志文件,并找到与特定字符串匹配的最后一个条目。
该条目可以是末尾的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行,它将失败
简单使用Where-Object
过滤器有什么问题吗?
Get-Content $location |
Where-Object { $_ -match $srch } |
Select-Object -Last 1