linux - 在 .csv 中编辑带日期的字段

标签 linux bash awk

我有 .csv 文件,其中包含如下行:

xxxx,xxxxxx,Sep  1, 2015 21:32:15.xxxxxxxxx WEST
xxxx,xxxxxx,Sep 28, 2015 23:46:16.xxxxxxxxx WEST
xxxx,xxxxxx,Sep 30, 2015 21:23:17.xxxxxxxxx WEST

我需要将所有日期和时间更改为:

xxxx,xxxxxx,2015-09-01,21:32:15
xxxx,xxxxxx,2015-09-28,23:46:16
xxxx,xxxxxx,2015-09-30,21:23:17

我认为使用 awk 和 date 是可能的,但直到现在都没有任何效果。

最佳答案

$ cat tst.awk
BEGIN{ FS=OFS=","; mths="JanFebMarAprMayJunJulAugSepOctNovDec" }
{
    split($3,mthDay,/ +/)
    split($4,yrTime,/[ .]/)
    $3 = sprintf("%04d-%02d-%02d", yrTime[2], (match(mths,mthDay[1])+2)/3, mthDay[2])
    $4 = yrTime[3]
    print
}

$ awk -f tst.awk file
xxxx,xxxxxx,2015-09-01,21:32:15
xxxx,xxxxxx,2015-09-28,23:46:16
xxxx,xxxxxx,2015-09-30,21:23:17

关于linux - 在 .csv 中编辑带日期的字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32868621/

相关文章:

linux - Bash 文件操作

linux - 表格式化 shell 脚本

sed - 从 mysqldump 中按表名获取 INSERT 的行数 - awk、sed、grep

linux - 树莓派温度项目,在树莓派上读取并在远程网络服务器上显示

linux - git 克隆到主目录

linux - 如何使用 docker import 导入多个图像?

git - 如何创建 git hook 以在提交消息前添加分支名称?

java - bash中如何模拟ctrl+c复制文件

python - 如何根据用户名更改目录?

linux - 使用 awk 从 2 个过滤文件中删除重复项