Linux 更改每行.csv文件中的日期格式
我有一个如下的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'
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线程,所以我做了一些假设。不要恨我,因为无论出于什么原因,苏决定神奇地为我订阅一个新主题。