将时间从纪元毫秒转换/替换为日志文件中人类可读的日期

fas*_*oot 2 sed awk timestamps conversion

我有一个具有以下结构的日志文件

例子:

1522693524403 entity1,sometext
1522693541466 entity2,sometext
1522693547273 entity1,sometext
...
Run Code Online (Sandbox Code Playgroud)

现在我想在 Debian 系统上使用 bash 命令将所有日志文件中的时间从纪元毫秒替换为 DD.MM.YYYY HH:MM:SS。

我尝试了这里和其他网站上提供的不同解决方案,但它对我来说并没有真正起作用。

有人可以帮我吗?

干杯

快速启动

tha*_*isp 5

如果使用shell脚本逐行读取,或者awk脚本调用system date,会很慢,进程太多。您必须使用简单的 awk、Perl、Python 或任何脚本。所有语言都具有用于格式之间转换的标准日期时间函数。

这里这里有一些很好的参考。如果您想使用 GNUawk 时间函数strftime(),您只需选择纪元子字符串(不包括毫秒):

$ awk '{$1 = strftime("%F %T", substr($1,1,10))} 1' file
2018-04-02 21:25:24 entity1,sometext
2018-04-02 21:25:41 entity2,sometext
2018-04-02 21:25:47 entity1,sometext
Run Code Online (Sandbox Code Playgroud)

或者一起打印毫秒:

$ awk '{$1 = strftime("%F %T", substr($1,1,10)) "." substr($1,11)} 1' file
2018-04-02 21:25:24.403 entity1,sometext
2018-04-02 21:25:41.466 entity2,sometext
2018-04-02 21:25:47.273 entity1,sometext
Run Code Online (Sandbox Code Playgroud)

或者打印日-月-年格式:

$ awk '{$1 = strftime("%d-%m-%Y %T", substr($1,1,10))} 1' file
02-04-2018 21:25:24 entity1,sometext
02-04-2018 21:25:41 entity2,sometext
02-04-2018 21:25:47 entity1,sometext
Run Code Online (Sandbox Code Playgroud)