0

1 日を通して絶えず書き込まれているログ ファイルがあります。ログファイルをチェックして、特定の文字列に一致する最後のエントリを見つける方法が必要です。

このエントリは、末尾から 5 行または 5000 行の可能性があります。

ログ全体を読むのは気が進まない (1 日の終わりには 60000 行を超える可能性がある)。

また、一致するすべてのエントリを取り出してから最後のエントリを取得したくはありません。実行中の場合、一致するエントリがログの 3 分の 1 を占める可能性があるからです。

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 に答える