хвост -F log.log | grep ResponseTime | cut -d = -f 2 - PullRequest
3 голосов
/ 14 марта 2011

У меня есть файл журнала в реальном времени с именем log.log, и я хочу перехватить в нем некоторые подходящие шаблоны и значения:

Пример: log.log растет, и мы ищем строки с шаблоном "ResponseTime =VALUE ", и мы хотим извлечь совпадающее VALUE:

Я выполняю:

tail -F log.log | grep ResponseTime | cut -d = -f 2 | tr -d " "

И я ожидаю увидеть

VALUE1
VALUE2
.. etc

Но это не работает... что мне делать?

Спасибо, NaMo

===========

Спасибо, теперь это работает.Я использую: inotail -f log.log |stdbuf -oL grep ResponseTime |stdbuf -oL cut -d '=' -f 2 |stdbuf -oL tr -d ""

Ответы [ 4 ]

1 голос
/ 14 марта 2011

Причина, по которой он не работает, заключается в том, что некоторые команды не сбрасывают STDOUT с каждым выводом.Поэтому более поздние команды никогда ничего не передаются.

Я бы использовал только одну команду после tail, такую ​​как:

tail -F t.log  | sed '/ResponseTime/!d;s/ResponseTime\s+=\s+(\d+)/\\1/'
1 голос
/ 14 марта 2011

Попробуйте изменить grep на stdbuf -oL grep.

Подробнее см. BASHFAQ / 009 .

0 голосов
/ 14 марта 2011

Если вы хотите удалить символы новой строки из вашего вывода, вы можете выполнить одно из следующих действий:

| cut -d = -f 2|sed -e :a -e '$!N;s/\n//;ta' 

| cut -d = -f 2|tr -d '\n'

| cut -d = -f 2|awk '{printf "%s",$0}'
...