2016-12-16 7 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

Почему вы опубликовали ответ на ruby, когда OP пометил свой вопрос 'bash' и' awk'? Я уверен, что я мог бы подумать о решении 'C#' или 'schem' для решения проблемы OP, но это было бы выходом из сферы действия ... – Aserre

+0

Я не смотрел на теги, просто увидел, что это пришло в моем почтовом ящике, и поскольку я только слежу за рубиновыми нитями, я сделал некоторые предположения. Не ненавидите меня, потому что по какой-то причине SO решила магически подписать меня к новой теме. –

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 

Это занимает 4-е поле ($4), ограниченную ; (-F\;), использует это в качестве параметра командной системы 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') 
Смежные вопросы