преобразуйте формат даты в журнале

Попробовать watch. Из страницы справочника:

Имя:

watch - выполняйте программу периодически, показывая выходной полный экран

Резюме

watch [-dhvt] [-n ] [--differences[=cumulative]] [--help] [--interval=] [--no-title] [--version] 

Описание

watch выполнения неоднократно управляют, отображая его вывод (первое экранное). Это позволяет Вам наблюдать, что вывод программы изменяется со временем. По умолчанию программа запускается каждые 2 секунды; использовать -n или --interval указывать другой интервал.

-d или --differences флаг выделит различия между последовательными обновлениями. --cumulative опция делает выделение "липким", представляя рабочий дисплей всех положений, которые когда-либо изменялись. [...]

watch будет работать, пока не прервано.

Обратите внимание, что "в реальном времени" должен был бы быть приближен "однажды секундой" (например), здесь...

7
14.12.2013, 20:04
4 ответа

Вы могли сделать что-то как:

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/'
5
27.01.2020, 20:17

В ударе Вы могли сделать следующее:

$ 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

2
27.01.2020, 20:17

Использовать 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 печатает имя месяца согласно Вашей локали.

1
27.01.2020, 20:17

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))
0
27.01.2020, 20:17

Теги

Похожие вопросы