Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在csv列中将日期格式从mmddyy转换为mm/dd/yyyy,并在shellscript中保存回同一列_Shell_Unix - Fatal编程技术网

如何在csv列中将日期格式从mmddyy转换为mm/dd/yyyy,并在shellscript中保存回同一列

如何在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

我有一个在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
那么一个简单的GNU
sed
替换将是:

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;#'谢谢。如果我的输入中有多个日期字段,如何为特定列实现这一点?