Попробовать watch
. Из страницы справочника:
Имя:
watch
- выполняйте программу периодически, показывая выходной полный экранРезюме
watch [-dhvt] [-n
] [--differences[=cumulative]] [--help] [--interval= ] [--no-title] [--version] Описание
watch
выполнения неоднократно управляют, отображая его вывод (первое экранное). Это позволяет Вам наблюдать, что вывод программы изменяется со временем. По умолчанию программа запускается каждые 2 секунды; использовать-n
или--interval
указывать другой интервал.
-d
или--differences
флаг выделит различия между последовательными обновлениями.--cumulative
опция делает выделение "липким", представляя рабочий дисплей всех положений, которые когда-либо изменялись. [...]
watch
будет работать, пока не прервано.
Обратите внимание, что "в реальном времени" должен был бы быть приближен "однажды секундой" (например), здесь...
Вы могли сделать что-то как:
awk -F- 'BEGIN{split("Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec",m,",")}
{print m[$2], substr($0,9)}'
Или:
awk -F- '{print substr("JanFebMarAprMayJunJulAugSepOctNovDec", \
$2*3-2,3), substr($0,9)}'
Или:
sed 's/$/:01Jan02Feb03Mar04Apr05May06Jun07Jul08Aug09Sep10Oct11Nov12Dec/
s/.....\(..\).\(.*\):.*\1\(...\).*/\3 \2/'
В ударе Вы могли сделать следующее:
$ tmpdate='2013-09-16 16:06:18,145-0500'
$ date +%c -d "$tmpdate"
Mon 16 Sep 2013 05:06:18 PM EDT
Так, в строке журнала, которую Вы имеете, Вы могли извлечь поле даты следующим образом:
tmpdate=`echo "2013-12-14 18:53:33 aaaaaaaaaaaaaaaa" | cut -f1-2 -d ' '`
Для большего количества форматов даты см.: http://www.gnu.org/software/coreutils/manual/html_node/Date-input-formats.html#Date-input-formats
Использовать python convert.py < logfile
с convert.py
:
import sys
from datetime import datetime
for line in sys.stdin:
dts = line[:19]
d = datetime.strptime(dts, '%Y-%m-%d %H:%M:%S')
print d.strftime("%b %d %H:%M:%S"), line[20:],
Это может быть далее оптимизировано как часы, минуты, секунды не должны быть проанализированы. %b
в strftime
печатает имя месяца согласно Вашей локали.
Python (входной файл - data.log
, выходной файл - out.log
)
#!/usr/bin/env python
import datetime
import os
with open('data.log') as f, open('out.log', 'w') as f2:
for line in f:
log_date, text = line.rsplit(None, 1)
log_date = datetime.datetime.strptime(log_date, '%Y-%m-%d %H:%M:%S')
log_date = log_date.strftime('%b %d %H:%M:%S')
f2.write('{} {}{}'.format(log_date, text, os.linesep))