使用 awk 格式化 csv 中的日期顺序

使用 awk 格式化 csv 中的日期顺序

我有一个包含以下数据结构的 csv 文件:[MM/DD/YYYY]

1111,2222,3333,4444,5555,6666,7777,11/27/2017 18:58:48,11/27/2017 19:07:57

我的目标是将日期的格式更改为:[YYYY/MM/DD]

1111,2222,3333,4444,5555,6666,7777,2017/11/27 18:58:48,2017/11/27 19:07:57

我正在尝试使用 awk 来完成此任务,但任何其他可以完成这项工作的工具也是可以接受的。

答案1

Awk解决方案:

awk -F',' 'function reformat_date(c){     # `c` - column value as an argument
               y = substr(c, 7, 4);       # extract `year` value
               sub(/\/[0-9]{4}/, "", c);  # remove `year` value
               return y"/"c               # return rearranged `YYYY/MM/DD` value
           }
           { $8 = reformat_date($8); $9 = reformat_date($9) }1' OFS=',' file.csv

示例输出:

1111,2222,3333,4444,5555,6666,7777,2017/11/27 18:58:48,2017/11/27 19:07:57

答案2

尝试这个 :

sed -E 's|([0-9]{2}/[0-9]{2})/([0-9]{4})|\2/\1|g' file

或者

perl -pe 's|(\d{2}/\d{2})/(\d{4})|$2/$1|g' file

输出 :

1111,2222,3333,4444,5555,6666,7777,2017/11/27 18:58:48,2017/11/27 19:07:57

答案3

如果您的数据不包含任何其他类似日期的格式,您可以使用sed整行来更改日期:

sed 's#\([0-9][0-9]\)/\([0-9][0-9]\)/\([0-9][0-9][0-9][0-9]\)#\3/\1/\2#g'

相关内容