2014-03-12 77 views
0

日誌文件中使用的系統日期命令數據轉換看起來像:用awk變量

28 Feb 2014,12:43:10,SAST,1821996800,10.144.22.91,494225040,"CONNECT",STARTED,0,0,0,10.144.22.91:59172,->,1.1.1.6:80 
28 Feb 2014,12:43:10,SAST,1821996800,10.144.22.91,494225040,"CONNECT",TERMINATED,0,0,0,10.144.22.91:59172,->,1.1.1.6:80 

所需的輸出:

2014/02/28,12:43:10,SAST,1821996800,10.144.22.91,494225040,"CONNECT",STARTED,0,0,0,10.144.22.91:59172,->,1.1.1.6:80 
2014/02/28,12:43:10,SAST,1821996800,10.144.22.91,494225040,"CONNECT",TERMINATED,0,0,0,10.144.22.91:59172,->,1.1.1.6:80 

Shell命令在執行該轉換:

date -d "28 Feb 2014" +%Y/%m/%d 

問題: 如何使用awk做這種轉換(稍後我需要做轉換不同的時區之間的離子,這就是爲什麼date命令是用來操縱字符) 現在嘗試了幾種方案,但沒有任何人,任何SED或其它方法是否正常工作:

版本1(出於某種原因,日期命令不運行使用全部AWK變量,並給我錯誤所以沒有結果):

awk ' 
    BEGIN { FS = "," } 
    { 
    while ("date -d $1 +%Y/%m/%d" | getline ddd) print ddd; 
    } 
    ' _SOURCE_FILE 

版本2(根據需要,這不工作,但給我一個額外的行,並在其中添加一個「0」,也就是系統執行代碼):

awk ' 
    BEGIN { FS = "," } 
    { 
    $1 = system("date -d \"$1\" +%Y/%m/%d") 
    print $0 
    } 
    ' _SOURCE_FILE 

幫助超過讚賞。

回答

0

awk不擴展字符串內的變量,使用串聯。當命令只產生一行輸出時,也不需要使用while

"date -d " $1 "+%Y/%m/%d" | getline ddd; 
$1 = ddd; 
print $0; 
+0

謝謝Barmar的快速回復。 我有一些麻煩,要了解如何使用您的示例,因爲我收到錯誤。 日期:額外操作數'2014 +%Y /%m /%d' 嘗試'date --help'以獲取更多信息。 – user3409338