2016-12-16 29 views
0

我有一個CSV文件像這樣:更改.csv文件日期格式每一行

text;text;text;Date  
text;text;text;Date  
text;text;text;Date  

的日期格式是這樣的:

Mon 14 Nov 2016 13:07:30  

而且我想改變這種格式(時間戳)每排 14-11-2016 23:36:33

+0

什麼'13之間的相關性:07:30'和'23:36:33'?考慮更明確地指定格式,通過指示類似「DD-MM-YYYY HH:mm:ss」? – CollinD

回答

-2

我做了how to scrub CSV data in ruby

一個小巧寫了你

總之,鑑於你的輸入,你可以擦洗和數據紅寶石轉換,像這樣:

require 'date'                                                        

newFile = File.new("new.csv", "w+")                                                   
oldFile = File.read("original.csv")                                                   

oldFile.lines.each do |line|                                                    
    lineArray = line.split(';')                                                    
    formattedDate = DateTime.parse(lineArray[3]).strftime('%d-%m-%Y %H:%M:%S')                                     
    lineArray[3] = formattedDate                                                    

    newFile.puts "#{lineArray.join(';')}\n"                                                 
end                                                           

newFile.close 

所有你需要做的就是在你的目錄中保存這個腳本爲parser.rb,確保原始CSV是保存作爲original.csv(或相應地更新腳本),然後在終端中運行ruby parser.rb

+0

爲什麼當OP用'bash'和'awk'標記他的問題時,你發佈了一個紅寶石答案?我很確定我可以考慮一個'c#'或'scheme'解決方案來解決OP的問題,但那樣會超出範圍... – Aserre

+0

我沒有看標籤,只是看到它來在我的收件箱中,因爲我只遵循ruby線程,所以我做了一些假設。不要討厭我,因爲無論出於何種原因,我決定神奇地訂閱我一個新話題。 –

0

使用AWK和date

$ awk -v OFS=\; -F\; -v qt="'" ' { 
    str="date -d" qt $4 qt " " qt "+%Y-%m-%d %H:%M:%S" qt; 
    str | getline d; 
    print $1,$2,$3,d 
}' file 
text;text;text;2016-11-14 13:07:30 

這需要由;-F\;)限定的第四字段($4),採用的是作爲參數傳遞給系統date命令,讀取其輸出到可變d和打印出三個第一字段和d

0

如果您的系統支持進程替換,你可以做這樣的事情:

paste -d\; <(cut -d\; -f1-3 date.csv) <(cut -d\; -f4 date.csv | date -f - '+%Y-%m-%d %H:%M:%S')