2015-11-06 86 views
0

我使用每5分鐘運行一次的bash腳本收集過去20天的數據。我不知道該如何輸出數據,因此我開始編寫腳本。我從那以後發現了一個相當酷的js圖形,它可以從CSV中讀取。更改日期格式 - bash或php

唯一的問題是我的約會對象是目前的格式:

週五11月6日7時52分02秒

,爲CSV我需要它是

2015年11月6日07:52:02

所以我需要將我的結果記錄下來並轉換爲日期。

的日期貓/ grep的是:

cat speeds.txt | grep 2015 | awk '{print $1" "$2" "$3" "$4}' 

我怎麼能使用bash或者PHP或者周圍此開關上的任何腦波?

感謝

PS - 再次啓動檢查使用日期+%Y%M%d」,「%H:%M:%S是可悲的是不是一種選擇:(

+1

您可以發佈樣本數據的兩行呢?另外,你的'grep'在其中有2015年,但你的日期沒有。 – houtanb

+0

2015年的grep只是因爲這是線上唯一的對象,對其他任何東西都可能得到誤報。 週五11月6日9點09分18秒 週五11月6日9時14分46秒 是從貓/ grep的輸出的2行。還是你想要沒有吝嗇? – user1972018

+0

我只是說在你的文本文件中有這樣一個日期:'Fri Nov 6 07:52:02'沒有2015,所以對2015年的吝嗇不會給你任何東西。我猜這是一個複製粘貼錯誤。如果您使用示例行更新您的問題,我可以在下面更新我的答案以使用它。 – houtanb

回答

0

假設所有的線包含日期:

$ cat file   
Fri Nov 6 07:52:02 
... 
$ awk 'BEGIN { 
    months["Jan"] = 1; 
    months["Feb"] = 2; 
    months["Mar"] = 3; 
    months["Apr"] = 4; 
    months["May"] = 5; 
    months["Jun"] = 6; 
    months["Jul"] = 7; 
    months["Aug"] = 8; 
    months["Sep"] = 9; 
    months["Oct"] = 10; 
    months["Nov"] = 11; 
    months["Dec"] = 12; 
} 
{ 
    month = months[$2]; 
    printf("%s-%02d-%02d %s\n", 2015, month, $3, $4); 
}' file > out 
$ cat out 
2015-11-06 07:52:02 
... 

如果外核層你需要修改一些你可以稍微調整一下awk腳本的行,例如。匹配包含2015每一行:

... 
# Match every line containing 2015 
/2015/ { 
    month = months[$2]; 
    printf("%s-%02d-%02d %s\n", 2015, month, $3, $4); 
    # Use next to prevent this the other print to happen for these lines 
    # Like 'continue' in while iterations 
    next; 
}; 
# This '1' will print all other lines as well: 
# Same as writing { print $0 } 
1 
+0

令人驚訝的是,謝謝,這工作完美 - 把我的grep的輸出放到一個新的文本文件中,然後運行這個腳本並完成工作。 – user1972018

+0

@ user1972018我剛更新了一些可能適合您需求的信息。 – andlrc

0

您可以使用日期格式大紀元格式bash腳本

date -d 'Fri Nov 6 07:52:02' +%s; 

1446776522 

date -d @1446776522 +"%Y-%m-%d %T " 

2015-11-06 07:52:02 
0

既然你沒有提供輸入,我假設你有一個名爲speeds.txt文件,其中包含:

Fri Oct 31 07:52:02 3 
Fri Nov 1 08:12:04 4 
Fri Nov 2 07:43:22 5 

(在345以上只是爲了表明你可以在行中有其他數據,但不是必需的)。

使用這個命令:

cat speeds.txt | cut -d ' ' -f2,3,4 | while read line ; do date -d"$line" "+2015-%m-%d %H:%M:%S" ; done; 

你得到的輸出:

2015-10-31 07:52:02 
2015-11-01 08:12:04 
2015-11-02 07:43:22