Linux 更改每行.csv文件中的日期格式

Linux 更改每行.csv文件中的日期格式,linux,bash,shell,awk,Linux,Bash,Shell,Awk,我有一个如下的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我在 简而言之,根据您的输入,您可以使用ruby清理和转换数据,如下所示: require 'date'

我有一个如下的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

我在

简而言之,根据您的输入,您可以使用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

我在

简而言之,根据您的输入,您可以使用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

使用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
),由
分隔
-F\;
),使用is作为系统
日期
命令的参数,将其输出读取到变量
d
,并打印出前三个字段和
d

使用awk和
日期

$ 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
),由
分隔
-F\;
),使用is作为系统
日期
命令的参数,将其输出读取到变量
d
,并打印出前三个字段和
d

如果您的系统支持进程替换,您可以执行以下操作:

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

粘贴-d\ 如果系统支持进程替换,则可以执行以下操作:

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

粘贴-d\;
13:07:30
23:36:33
之间有什么关联?考虑更明确地指定格式,通过指示诸如“代码> DD-MMYYYY HH:MM:SS < /代码>?<代码> 13:0730和<代码> 23∶36:33 < /代码>之间的相关性是什么?考虑更明确地指定格式,通过指示诸如“代码> DD-MMYYYY HH:MM:SS < /代码>?为什么当OP用“代码> BASH < /代码>和<代码> AWK < /代码>来标记他的问题时,您会发布一个Ruby答案吗?我很确定我可以想出一个
c#
scheme
的解决方案来解决OP的问题,但那超出了范围……我没有看标签,只是看到它出现在我的收件箱中,因为我只关注ruby线程,所以我做了一些假设。不要恨我,因为不管出于什么原因,苏决定神奇地为我订阅一个新主题。为什么当OP用
bash
awk
标记他的问题时,你会发布一个ruby答案?我很确定我可以想出一个
c#
scheme
的解决方案来解决OP的问题,但那超出了范围……我没有看标签,只是看到它出现在我的收件箱中,因为我只关注ruby线程,所以我做了一些假设。不要恨我,因为无论出于什么原因,苏决定神奇地为我订阅一个新主题。