2016-10-05 1 views
1

У меня очень большой файл журнала, содержащий журнал сообщений перезагрузки службы. После того, как я инициировал перезапуск службы с помощью внешней команды, мне нужно вывести этот файл журнала из последнего сообщения о перезагрузке и проверить следующие сообщения, чтобы подтвердить правильную процедуру перезапуска. Я анализирую сообщения с помощью python, поэтому нахожу только последнее вхождение и требуемый файл, затем я проверяю вывод по очереди и просто закрываю соединение, когда читаю все, что мне нужно.unix shell, tail -f от последнего появления шаблона

.... # lots of previous data 
[timestamp] previous message 
[timestamp] Rebooting... # from tis point i need to track messages 
[timestamp] doing thing 
[timestamp] doing other thing 
[timestamp] doing final thing # final point, reboot successful 
[timestamp] service activity message # 

Как я могу выполнить такой хвостовик?

tail -f <from last Rebooting... message> 
+2

Итак ... в чем ваш вопрос? – Siguza

ответ

2

дает щедрое значение буфера, реверс, экстракт, обратным

$ tail -1000 file | tac | awk '1,/Rebooting/' | tac 

или замените awk скрипт с !p; /Rebooting/{p=1}

+1

OP использует 'tail -f', который следует за файлом, поскольку он написан, я не уверен, что он будет работать таким образом; если это так, вы должны включить флаг '-f' в свой ответ! – Aaron

1

Может быть что-то вроде:

tail -fn +$(awk '/Rebooting/ { line = NR } END { print(line) }' log) log 

который использует awk найти номер строки la st, а затем хвосты, начинающиеся с этой линии.

Это все еще сканирует весь файл.

Если вы действительно делаете это с помощью python, возможно, вам удастся лучше просмотреть файл в обратном порядке прямо в python.

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