chuyển đổi định dạng ngày trong nhật ký


7

Tôi có một nhật ký với định dạng ngày sau:

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

Điều gì sẽ là giải pháp đơn giản nhất để chuyển đổi nó thành

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

tốt nhất là trong bash (hoặc python)

Câu trả lời:


5

Bạn có thể làm một cái gì đó như:

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

Hoặc là:

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

Hoặc là:

sed 's/$/:01Jan02Feb03Mar04Apr05May06Jun07Jul08Aug09Sep10Oct11Nov12Dec/
     s/.....\(..\).\(.*\):.*\1\(...\).*/\3 \2/'


1

Sử dụng python convert.py < logfilevới 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:],

Điều này có thể được tối ưu hóa hơn nữa vì giờ, phút, giây không cần phải phân tích cú pháp. %btrong strftimebản in vào tên tháng theo miền địa phương của bạn.


0

Python (tệp đầu vào - data.log, tệp đầu ra - 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))
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.