将纪元秒转换为内联时间(最好是 vim,但命令行会很酷)

Joe*_*Joe 4 vim time command-line

我有一个格式如下的文件

47 2013-05-01 1367406011 2 30 15
47 2013-05-01 1367406388 1 29 14
43 2013-05-01 1367407469 1 26 12
42 2013-05-01 1367407489 1 25 11
42 2013-05-01 1367407810 1 24 11
39 2013-05-01 1367409056 1 22 9
41 2013-05-01 1367409610 1 22 9
36 2013-05-01 1367411409 1 22 9
34 2013-05-01 1367412388 1 20 9
32 2013-05-01 1367413208 1 19 9
Run Code Online (Sandbox Code Playgroud)

其中第三列是自纪元以来进行测量的时间(以秒为单位)。我希望能够将时间视为每天的时钟时间,并且我正在寻找最简单的方法来转换文件中的每一列。

执行转换的最有效方法是什么?(我在 OSX 上)

rom*_*inl 5

在 Vim 中,这个快速宏可以完成这项工作:

\n\n
qq                           " start recording\n0                            " go to first column\n2W                           " go to time column\n"mciw                        " put time in register m and replace it\xe2\x80\xa6\n<C-r>=strftime("%T", @m)<CR> " \xe2\x80\xa6with localized time\n<Esc>                        " exit insert mode\nq                            " stop recording\n
Run Code Online (Sandbox Code Playgroud)\n\n

录制宏后,选择要翻译的所有行,然后执行以下操作:

\n\n
:\'<,\'>norm @q\n
Run Code Online (Sandbox Code Playgroud)\n\n

如果这些行与您不想触及的其他行交错,则可以使用该命令在与某些模式匹配的行上:g[lobal]执行宏:

\n\n
:g/2013-05/norm @q\n
Run Code Online (Sandbox Code Playgroud)\n\n

参考:

\n\n
:h :normal\n:h :global\n
Run Code Online (Sandbox Code Playgroud)\n\n

\n\n
:h strftime()\n
Run Code Online (Sandbox Code Playgroud)\n\n

日期格式的想法。

\n\n

使用该宏,您的示例立即变为:

\n\n
47 2013-05-01 13:00:11 2 30 15\n47 2013-05-01 13:06:28 1 29 14\n43 2013-05-01 13:24:29 1 26 12\n42 2013-05-01 13:24:49 1 25 11\n42 2013-05-01 13:30:10 1 24 11\n39 2013-05-01 13:50:56 1 22 9\n41 2013-05-01 14:00:10 1 22 9\n36 2013-05-01 14:30:09 1 22 9\n34 2013-05-01 14:46:28 1 20 9\n32 2013-05-01 15:00:08 1 19 9\n
Run Code Online (Sandbox Code Playgroud)\n