如何在csv列中将日期格式从mmddyy转换为mm/dd/yyyy,并在shellscript中保存回同一列
我有一个在mmddyy中包含日期列的csv文件(例如:090718)。我需要将其转换为mm/dd/yyyy(ex:09/07/2018),并使用shell脚本将其保存回csv中的同一列,假设您的问题只是以以下方式重新格式化日期字符串:将两个数字的组隔离,并在最后一个组之前添加“20”(两个数字上的日期无论如何都不足以猜测世纪) 假设日期列由如何在csv列中将日期格式从mmddyy转换为mm/dd/yyyy,并在shellscript中保存回同一列,shell,unix,Shell,Unix,我有一个在mmddyy中包含日期列的csv文件(例如:090718)。我需要将其转换为mm/dd/yyyy(ex:09/07/2018),并使用shell脚本将其保存回csv中的同一列,假设您的问题只是以以下方式重新格式化日期字符串:将两个数字的组隔离,并在最后一个组之前添加“20”(两个数字上的日期无论如何都不足以猜测世纪) 假设日期列由分隔 例如,input.csv data_l1c1;110918;data_l1c3 data_l2c2;090718;data_l2c3 那么一个简单的G
分隔代码>
例如,input.csv
data_l1c1;110918;data_l1c3
data_l2c2;090718;data_l2c3
那么一个简单的GNUsed
替换将是:
sed -i -E "s/;(.{2})(.{2})(.{2});/;\1\/\2\/20\3;/g" input.csv
;(.{2})(.{2})(.{2});代码>在之间查找3组2个字符代码>
- 替换字符串为
\1\/\2\/20\3;代码>找到的每个组都标有:\1表示找到的第一组两位数,…\3表示第三组。根据您的问题陈述,这些组中的每一个都应显示为a/(斜杠必须受到保护,因此它们显示为\/
),最后一个组\3前面加上“20”
- i表示“in-place”,因此替换源中替换字符串找到的表达式(文件
input.csv
已修改)
每行读取文件行。提取日期字段。使用sed
或awk
修改它。将新行写入另一个文件。保持来源完整。开始,做一些重新搜索,如果您有特定问题,请返回此处(请参阅和)。我会确保您捕获的是数字,这样您就不会破坏另一个包含6个字符的字段:sed-r's#;#\1/\2/20\3;#'代码>谢谢。如果我的输入中有多个日期字段,如何为特定列实现这一点?