从日志文件中查找最新的匹配项
Find latest matching entry from log file
我有一个日志文件,全天都在不断写入。
我需要一种方法来检查日志文件,并找到与特定字符串匹配的最后一个条目。
此条目可以是从末尾开始的 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
我有一个日志文件,全天都在不断写入。 我需要一种方法来检查日志文件,并找到与特定字符串匹配的最后一个条目。
此条目可以是从末尾开始的 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