2

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

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 命令行中有任何可用的实用程序。

4

2 回答 2

5

我会为此使用 sed 而不是 awk。像这样的东西:

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

编辑问题之前的旧答案:

您可以使用tr : /将冒号转换为斜杠,或者您可以让 awk 直接进行替换。但是为什么你会认为 HH/MM/SS 是一种有效的格式,这超出了我的理解。

于 2012-04-21T13:42:06.287 回答
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
    }'
于 2012-04-21T14:07:32.333 回答