2016-09-25 50 views
0

我有數百個日期格式爲%d /%m/%Y%H:%M:%S,但我想將其更改爲格式%Y-%間%d%H:%M:%S在Linux(UBUNTU)上使用AWK在csv文件中將%d /%m /%y更改爲%y%m-%d

INPUT_FILE.csv (date format == %d/%m/%y %H:%M:%S) 
13/05/87 4:00:00,1.27470,1.27530,1.27460,1.27480,101926,356 
14/05/87 4:01:00,1.27490,1.27520,1.27310,1.27490,102419,493 
15/05/87 4:02:00,1.27490,1.27540,1.27440,1.27530,102846,427 
16/05/87 4:03:00,1.27520,1.27570,1.27490,1.27550,103202,356 
17/05/87 4:04:00,1.27550,1.27640,1.27510,1.27590,103528,326 
...... 
...... 
...... 
24/02/09 4:00:00,1.27470,1.27530,1.27460,1.27480,101926,356 
25/02/09 4:01:00,1.27490,1.27520,1.27310,1.27490,102419,493 
26/02/09 4:02:00,1.27490,1.27540,1.27440,1.27530,102846,427 
27/02/09 4:03:00,1.27520,1.27570,1.27490,1.27550,103202,356 
28/02/09 4:04:00,1.27550,1.27640,1.27510,1.27590,103528,326 


REQUIRED_OUTPUT.csv (date format == %Y-%m-%d %H:%M:%S) 

1987-05-13 4:00:00,1.27470,1.27530,1.27460,1.27480,101926,356 
1987-05-14 4:01:00,1.27490,1.27520,1.27310,1.27490,102419,493 
1987-05-15 4:02:00,1.27490,1.27540,1.27440,1.27530,102846,427 
1987-05-16 4:03:00,1.27520,1.27570,1.27490,1.27550,103202,356 
1987-05-17 4:04:00,1.27550,1.27640,1.27510,1.27590,103528,326 
...... 
...... 
...... 
2009-02-24 4:00:00,1.27470,1.27530,1.27460,1.27480,101926,356 
2009-02-25 4:01:00,1.27490,1.27520,1.27310,1.27490,102419,493 
2009-02-26 4:02:00,1.27490,1.27540,1.27440,1.27530,102846,427 
2009-02-27 4:03:00,1.27520,1.27570,1.27490,1.27550,103202,356 
2009-02-28 4:04:00,1.27550,1.27640,1.27510,1.27590,103528,326 

我已經嘗試了幾個AWK變化但我無法讓它工作。任何幫助

更新:我的錯誤,我應該提到的是,日期或年內1981年至2016年

這裏開始是我到目前爲止已經試過:

awk -F, '{ gsub("/","-"); split($1, f, " "); print > ("my_data_" f[1]"v" ".csv")}' INPUT_FILE.csv 

我得到的文件分成例如

my_data_13-05-87v.csv 
my_data_14-05-87v.csv 
my_data_15-05-87v.csv 

與文件內容如下

# for my_data_13-05-87v.csv 
13-05-87 4:00:00,1.27470,1.27530,1.27460,1.27480,101926,356 

# for my_data_14-05-87v.csv 
14-05-87 4:01:00,1.27490,1.27520,1.27310,1.27490,102419,493 

# for my_data_15-05-87v.csv 
15-05-87 4:02:00,1.27490,1.27540,1.27440,1.27530,102846,427 

注:年從1981年去到2016年

我想與文件內容如下

# for my_data_1987-05-13v.csv 
1987-05-13 4:00:00,1.27470,1.27530,1.27460,1.27480,101926,356 

# for my_data_1987-05-14v.csv 
1987-05-14 4:01:00,1.27490,1.27520,1.27310,1.27490,102419,493 

# for my_data_1987-05-15v.csv 
1987-05-15 4:02:00,1.27490,1.27540,1.27440,1.27530,102846,427 

第二種格式問題的文件分割成如

my_data_1987-05-13v.csv 
my_data_1987-05-13v.csv 
my_data_1987-05-13v.csv 

:我也有不同的格式

INPUT_FILE.csv (date format == %d.%m.%y %H:%M:%S) 
13.05.1987 4:00:00.000,1.27470,1.27530,1.27460,1.27480,101926,356 
14.05.1987 4:01:00.000,1.27490,1.27520,1.27310,1.27490,102419,493 
15.05.1987 4:02:00.000,1.27490,1.27540,1.27440,1.27530,102846,427 
16.05.1987 4:03:00.000,1.27520,1.27570,1.27490,1.27550,103202,356 
17.05.1987 4:04:00.000,1.27550,1.27640,1.27510,1.27590,103528,326 


REQUIRED_OUTPUT.csv (date format == %Y-%m-%d %H:%M:%S) 

1987-05-13 4:00:00.000,1.27470,1.27530,1.27460,1.27480,101926,356 
1987-05-14 4:01:00.000,1.27490,1.27520,1.27310,1.27490,102419,493 
1987-05-15 4:02:00.000,1.27490,1.27540,1.27440,1.27530,102846,427 
1987-05-16 4:03:00.000,1.27520,1.27570,1.27490,1.27550,103202,356 
1987-05-17 4:04:00.000,1.27550,1.27640,1.27510,1.27590,103528,326 
+0

明年會發生什麼?除了你會通過,大概是這個過程,所以你不需要擔心它。更一般地說,如果您遇到17或27,37,47,57,67,77年的日期 - 2016,2017,2017,2035等日期應如何繪製?有多種可能性。 –

回答

1

你只需要輸入字段分隔符重新定義/和重新排列前三個字段。此外,如果年份字段的值爲>16,則假定爲20世紀,否則爲21世紀。雖然它,它的行寫到每日期命名的文件:

$ cat script.awk 
{ 
    print ($3>16?"19":"20") $3 "-" $2 "-" $1, $4 > my_data_$1"-"$2"-"$3".csv" 
} 

運行:

$ awk -F'[/ ]' -f script.awk INPUT_FILE.csv 
+0

這適用於20 **的年份,例如2009年,2010年等,但如果年份爲19 **,例如1985年,1990年等,則失敗 – JourneyMan

+0

@JourneyMan已更新。 –

+1

我需要能夠按照分割文件保存修改,而不是在終端上打印它們。看看我嘗試使用的我的awk腳本 – JourneyMan

0

天真的方法是使用substr

$ awk '{ $1 = sprintf("20%s-%s-%s", 
         substr($1, 7, 2), 
         substr($1, 4, 2), 
         substr($1, 1, 2)) 
     } 1' input.csv 
2009-02-24 4:00:00,1.27470,1.27530,1.27460,1.27480,101926,356 
2009-02-25 4:01:00,1.27490,1.27520,1.27310,1.27490,102419,493 
2009-02-26 4:02:00,1.27490,1.27540,1.27440,1.27530,102846,427 
2009-02-27 4:03:00,1.27520,1.27570,1.27490,1.27550,103202,356 
2009-02-28 4:04:00,1.27550,1.27640,1.27510,1.27590,103528,326 
相關問題