Авто-вставка пустых строк в `tail -f`
Наличие файла журнала, такого как:
[DEBUG][2016-06-24 11:10:10,064][DataSourceImpl] - [line A...]
[DEBUG][2016-06-24 11:10:10,069][DataSourceImpl] - [line B...]
[DEBUG][2016-06-24 11:10:12,112][DataSourceImpl] - [line C...]
который находится под tail -f
Мониторинг в режиме реального времени, можно ли автоматически вставить (с помощью команды мы передадим tail
) "пустые строки" после, скажем, 2 секунд бездействия?
Ожидаемый результат:
[DEBUG][2016-06-24 11:10:10,064][DataSourceImpl] - [line A...]
[DEBUG][2016-06-24 11:10:10,069][DataSourceImpl] - [line B...]
---
[DEBUG][2016-06-24 11:10:12,112][DataSourceImpl] - [line C...]
(потому что между двумя последовательными строками разрыв больше 2 секунд).
2 ответа
Решение
awk -F'[][\\- ,:]+' '1'
Выше разделит поля на ]
, [
, -
, ,
, а также
:
так, чтобы каждое поле было таким, как описано ниже:
[DEBUG][2016-06-24 11:10:10,064][DataSourceImpl] - [line A...]
22222 3333 44 55 66 77 88 999 ...
Затем вы можете объединить некоторые поля и использовать их для измерения разницы во времени:
tail -f input.log | awk -F'[][\\- ,:]+' '{ curr=$3$4$5$6$7$8$9 }
prev + 2000 < curr { print "" } # Print empty line if two seconds
# have passed since last record.
{ prev=curr } 1'
tail
не имеет такой функции. Если вы хотите, вы можете реализовать программу или скрипт, который проверяет последнюю строку файла; что-то вроде (псевдокод)
previous_last_line = last line of your file
while(sleep 2 seconds)
{
if (last_line == previous_last_line)
print newline
else
print lines since previous_last_line
}
Два замечания:
- это приведет к тому, что у вас не будет выхода в течение 2 секунд; вы можете чаще проверять последнюю строку и сохранять временную метку; но это требует больше кода...
- это зависит от того, что все линии уникальны; что разумно в вашем случае; так как у вас есть метки времени в каждой строке