Перевірте, який рядок виникає перший у зростаючому файлі


0

Я запускаю віддалений виконуваний файл, який створює файл журналу.

Я хочу написати сценарій, щоб перевірити, чи виконуваний файл виконувався успішно чи є помилка. Я можу це зробити, переглянувши зростаючий файл журналу і побачивши, чи є рядок "error"чи "success"першим.

Я знаю, що можу зібрати файл у режимі реального часу, використовуючи

tail -f output.log | grep --line-buffered "string"

Однак чи можу я написати сценарій, який підкаже, чи відбувається спочатку grep for "error"або grep for "success"?

Відповіді:


0

Шукайте обидва рядки за допомогою функції grep, витягніть номери рядків першого збігу та порівняйте значення.

  • опція grep -nдає номер рядка будь-яких збігів.
  • параметр -m1 перелічує лише першу відповідність, а потім виходить.
  • Між іншим, опція -Fшвидкого відображення - може бути корисною, якщо в рядку пошуку не потрібно регулярних виразів.

Приклад виводу з grep помилки буде виглядати приблизно так - рядок 235 повинен бути вилучений з виводу.

235:[Wed Jun 04 12:23:19 2014] [error] child pid 6575 Segmentation fault (11)

Номери рядків можна витягти, видаливши %%:.*з виводу найдовший збіг підрядків, щоб залишити числові значення, які порівнюються в операторі if.

er_match=$(tail -f output.log | grep -n -F -m1 --line-buffered "error")
ok_match=$(tail -f output.log | grep -n -F -m1 --line-buffered "success")

if [[ ${er_match%%:.*} - gt ${ok_match%%:.*} ]];then
    echo "error first"
else
    echo "sucess first"
fi

0

Це можна зробити, лише подивившись на перший результат, повернутий grep, наприклад, за допомогою head -n1:

status=$(grep -o 'success\|error' output.log | head -n1)
if [[ $status == "success" ]]; then
    # Program started successfully
else
    # Program encountered an error
fi

Дякую, але мені потрібно щось, що буде постійно перевіряти файл на "успіх" чи "помилку" та повертати, який з них відбудеться перший (вчасно)
Едді,

@Eddy: Я знаю занадто мало про те, output.logщоб дати кращу відповідь. Чи можете ви надати більше інформації? Наприклад: Як часто це відбувається errorі successтрапляється? Чи маєте ви якийсь контроль над запуском програми?
Тор

0

Якщо ви використовуєте egrep, ви можете перевірити наявність будь-якого рядка в кожному рядку:

egrep 'success|failure'

Це виведе рядки в порядок, і ви можете передати висновок на щось, щоб вибрати перший рядок.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.