2014-07-07 49 views
1

我有這樣一行提取Apache日誌轉換Apache日誌日期時間格式使用命令

awk '{print $4}' elasticsearch.log.* | cut -c2-15 | sed -e 's/$/:00:00/ 

每小時日期時間的問題是,輸出日期的格式像下面

07/Jul/2014:06:00:00 

有沒有辦法使用命令行將日期時間格式轉換爲更常見的格式,如'YYYY-MM-DD HH:mm:ss'eg 2014-07-07 06:00:00?

的一種方式,我發現現在的問題是使用中間腳本

#!/usr/bin/env python 

import sys 
import re 


months = {'Jan': '01', 'Feb': '02', 'Mar': '03', 'Apr': '04', 'May': '05', 'Jun': '06', 'Jul': '07', 'Aug': '08', 'Sep': '09', 'Oct': '10', 'Nov': '11', 'Dec' : '12'} 
regex = re.compile("(\d{2})/(\w+)/(\d{4}):(\d{2}):(\d{2}):(\d{2})",re.IGNORECASE) 
for line in sys.stdin: 
    try: 
     r = regex.search(line) 
     g = r.groups() 
     print g[2] + '-' + months[g[1]] + '-' + g[0] + ' ' + g[3] + ':' + g[4] + ':' + g[5] 
    except: 
     pass 

但我正在尋找,如果有一個更短的方式

回答

2

date(至少GNU的coreutils)也許可以爲幫助這裏。它可以識別許多不同的日期格式,但在你的情況下,斜槓必須首先與空格相對應tr

$ echo '07/Jul/2014 06:00:00\n09/Aug/2015 07:01:02' | 
> tr '/' ' ' | date -f - +%Y-%m-%d\ %H:%M:%S 
2014-07-07 06:00:00 
2015-08-09 07:01:02 

糟糕,我認爲您示例中的第一個冒號是拼寫錯誤,應該是空格。你的正則表明我錯了。在這種情況下,你可以這樣做:

$ echo '07/Jul/2014:06:00:00\n09/Aug/2015:07:01:02' | 
> sed -e 's/\// /g;s/:/ /1' | date -f - +%Y-%m-%d\ %H:%M:%S 
2014-07-07 06:00:00 
2015-08-09 07:01:02 

希望這會有所幫助。