我有一個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
我有一個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
我做了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
。
爲什麼當OP用'bash'和'awk'標記他的問題時,你發佈了一個紅寶石答案?我很確定我可以考慮一個'c#'或'scheme'解決方案來解決OP的問題,但那樣會超出範圍... – Aserre
我沒有看標籤,只是看到它來在我的收件箱中,因爲我只遵循ruby線程,所以我做了一些假設。不要討厭我,因爲無論出於何種原因,我決定神奇地訂閱我一個新話題。 –
使用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
。
如果您的系統支持進程替換,你可以做這樣的事情:
paste -d\; <(cut -d\; -f1-3 date.csv) <(cut -d\; -f4 date.csv | date -f - '+%Y-%m-%d %H:%M:%S')
什麼'13之間的相關性:07:30'和'23:36:33'?考慮更明確地指定格式,通過指示類似「DD-MM-YYYY HH:mm:ss」? – CollinD