У меня есть программа, которая запускает несколько утилит в ночное время. Эта утилита выводит каждое действие, которое оно принимает в тот же файл журнала каждую ночь. Журнал является кумулятивным, поэтому у меня есть тысячи строк для сортировки. Вот пример:Извлечение определенных частей файла журнала
10/15/2014 08:19:43 [Nightly Run] начался.
10/15/2014 08:19:44 Начало проверки заголовка в 8:19 утра 10/15/2014
10/15/2014 08:19:44 Невозможно прочитать заголовок - [Путь к файлу]
10/15/2014 08:19:46 End Header Check at 8:19 AM on 10/15/2014
10/15/2014 08:19:47 [Утилита 1] началась
10/15/2014 08:20: 14 [Утилита 1] завершена
15.10.2018 08:20:18 [Утилита 2] началась.
10/15/2014 08:20:18 [Утилита 2] закончилась.
10/15/2014 08:20:33 [Nightly Run] закончился.
проверка заголовка происходит по ночам, поэтому есть сотни строк, которые нужно пройти. Ошибка «невозможно прочитать заголовок» не возникает каждую ночь. Я пытаюсь вывести ночи, когда заголовок является ошибкой в текстовом файле, в основном я хотел бы, чтобы мой вывод читался как
10/15/2014 08:19:44 Start Header Check to 8:19 AM on 10/15/2014
10/15/2014 08:19:44 Невозможно прочитать заголовок - [Путь к файлу]
10/15/2014 08:19:46 Конец заголовка Проверка в 8:19 утра 10/15/2014
за каждый раз, когда проверка заголовка запускается и ошибки на определенном [пути к файлу].
Моя мысль состоит в том, чтобы разбить текст на отдельные объекты на основе «Начальная проверка заголовка»/«Проверка конечного заголовка» и использовать строку выбора, чтобы захватить только объекты, содержащие «Невозможно прочитать заголовок - [Путь к файлу]», ,
Get-content X:\logfile.txt -delimiter "Start Header Check" |
Select-String -Pattern 'Unable to read header - [Filepath]' |
out-file X:\outfile.txt
Который возвращает:
в 8:19 утра на 10/15/2014
10/15/2014 08:19:44 Невозможно прочитать заголовок - [Filepath]
10/15/2014 08:19:46 End Header Check at 8:19 AM on 10/15/2014
10/15/2014 08:19:47 [Утилита 1] началась
10/15/2014 08:20:14 [Утилита 1] завершена
15.10.2018 08:20:18 [Утилита 2] началась.
10/15/2014 08:20:18 [Утилита 2] закончилась.
10/15/2014 08:20:33 [Nightly Run] закончился.
Он вырезает большинство прогонов, которые я не хочу, но у меня все еще есть дополнительная информация, которая мне не нужна. Я понимаю, почему он возвращает это, но я не могу понять, как это сделать. Я бы предположил, что регулярное выражение должно быть связано каким-то образом, но я не использовал регулярное выражение в годах.
Я действительно рассматривал использование -raw-переключателя для параметра -raw и использования .slipt(), но я уверен, что я лаял с ним неправильное дерево.
Я плоский застрял, пробовал разные хитрости все утро, и я действительно не добился прогресса. Я бы перечислил все, что я пробовал, но я не хочу мутить воды. Любая помощь будет оценена по достоинству.
Вы можете сделать: cat | grep «Невозможно прочитать заголовок» -A 1 -B 1. Вы можете добавить еще один канал с wc, чтобы получить количество строк, но вам нужно удалить A и B из grep примерно так: cat | grep «Невозможно прочитать заголовок» | wc -l –
@FarhanRahman: Как вы это делаете с Powershell? Очень желательно читать теги перед отправкой на вопрос. :-) –