使用awk或其他方法转换最后一列中的日期格式

时间:2012-04-21 13:38:49

标签: linux bash sed awk

我在这样的文件中有数据......

405,,,405,15.4,0,04/21/12 14:13:29
402,,,402,15.4,0,04/21/12 14:13:37
404,,,404,15.5,0,2012/04/21 14:14:05
404,,,404,15.4,0,2012/04/21 14:14:11
403,,,403,15.4,0,2012/04/21 14:14:17

我想将最后一列转换为YYYY / MM / DD hh:mm:ss格式的日期。

某些行已经采用该格式,因此应忽略它们。

我尝试了以下awk命令但看起来很慢,有时会抛出错误

awk -F ',' '{ ("date -d \""$7"\" \"+%Y/%m/%d %T\"") | getline $7; print }' MyFile

这不必在awk中完成。我在标准的Debian命令行上有任何实用工具。

2 个答案:

答案 0 :(得分:5)

我使用sed而不是awk。像这样:

sed 's@,\(..\)/\(..\)/\(..\) @,20\3/\1/\2 @'

问题之前的旧答案已被编辑:

您可以使用tr : /将冒号转换为斜线,也可以让awk直接进行替换。但是为什么你会认为HH / MM / SS的有效格式超出了我的范围。

答案 1 :(得分:1)

由于您已标记了问题,因此我假设您gawk具有一些内置时间功能:

awk --re-interval -F, '
    $7 !~ /[[:digit:]]{4}\// {
        split($7, a, "[/ :]");
        strftime("%Y/%m/%d %H:%M:%S", 
            mktime("20" a[3] " " a[1] " " a[2] " " a[4] " " a[5] " " a[6]))}'
    }
    {
        print
    }'