2015-07-13 4 views
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 он потерпит неудачу.

ответ

1

Что-то не так просто с использованием фильтра Where-Object?

Get-Content $location | 
    Where-Object { $_ -match $srch } | 
    Select-Object -Last 1 
+0

веселит, в принципе, он работает, но он по-прежнему кажется, читать сверху вниз, как, когда я запускаю его против полных дней LOGFILE это занимает некоторое время, чтобы работать, если результат это нуждается в очень конец. – IGGt

+0

@IGGt Вы не можете пропустить, если вы не можете определить, где остановиться. –

+0

справедливо, я полагаю. Я просто подумал, что, возможно, в конце будет возможность начать чтение, как я представляю для большинства людей, самая важная информация обычно находится в конце файла журнала, а не в начале. – IGGt

Смежные вопросы