converte o formato de data no log

7

Eu tenho um registro com o seguinte formato de data:

2013-12-14 18:53:33 aaaaaaaaaaaaaaaa
2013-12-14 18:53:33 bbbbbbbbb
2013-12-14 18:53:33 ccccccccccccccccccccc

Qual seria a solução mais simples para convertê-lo em

Dec 14 18:53:33 aaaaaaaaaaaaaaaa
Dec 14 18:53:33 bbbbbbbbb
Dec 14 18:53:33 ccccccccccccccccccccc

preferencialmente em bash (ou python)

    
por Martin Vegter 14.12.2013 / 19:04

4 respostas

5

Você pode fazer algo como:

awk -F- 'BEGIN{split("Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec",m,",")}
         {print m[$2], substr($0,9)}'

Ou:

awk -F- '{print substr("JanFebMarAprMayJunJulAugSepOctNovDec", \
         $2*3-2,3), substr($0,9)}'

Ou:

sed 's/$/:01Jan02Feb03Mar04Apr05May06Jun07Jul08Aug09Sep10Oct11Nov12Dec/
     s/.....\(..\).\(.*\):.*\(...\).*/ /'
    
por 14.12.2013 / 19:28
2

No bash, você pode fazer o seguinte:

$ tmpdate='2013-09-16 16:06:18,145-0500'
$ date +%c -d "$tmpdate"
Mon 16 Sep 2013 05:06:18 PM EDT

Assim, na linha de log que você tem, você pode extrair o campo de data da seguinte forma:

tmpdate='echo "2013-12-14 18:53:33 aaaaaaaaaaaaaaaa" | cut -f1-2 -d ' ''

Para mais formatos de data, consulte: link

    
por 14.12.2013 / 19:19
1

Use python convert.py < logfile com 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:],

Isso pode ser ainda mais otimizado, pois as horas, minutos e segundos não precisam ser analisados. %b in strftime imprime o nome do mês de acordo com sua localidade.

    
por 14.12.2013 / 19:19
0

Python (arquivo de entrada - data.log , arquivo de saída - 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))
    
por 14.12.2013 / 19:21

Tags