【问题标题】:Fix timestamp skew in already existing syslog files修复现有系统日志文件中的时间戳偏差
【发布时间】:2016-06-16 20:05:44
【问题描述】:

我正在对一个分布式系统进行事后分析,其中一些主机的时钟出现偏差,因此 syslog 中的时间戳偏离了 3 分 12 秒。

是否也有一个命令行可以从 STDIN 中获取具有此类行的文件:

2016-06-13T23:58:43.324758+00:00 Host1 charon: 14[IKE] sending DPD request
...

然后在 STDOUT 中打印如下内容:

2016-06-14T00:01:55.324758+00:00 Host1 charon: 14[IKE] sending DPD request
...

系统日志中的多行消息很少,所以如果该工具也能够处理它会很好。我想到的第一个工具是 awk,但它如何做到这一点并不明显。

【问题讨论】:

    标签: linux date unix awk


    【解决方案1】:

    awk 来救援!

    $ awk '{split($1,a,"."); 
            gsub(/:|-|T/," ",a[1]); 
            $1=strftime("%Y-%m-%dT%H:%M:%S.", mktime(a[1])+12+3*60)a[2]}1' log
    

    【讨论】:

    • 不错的时间操作,但这将用单个空白字符替换他的日志文件中的所有选项卡或其他空白序列。而不是$1=strftime("%Y-%m-%dT%H:%M:%S.",mktime(a[1])+12+3*60)a[2] 使用sub(/[^[:space:]]+/,strftime("%Y-%m-%dT%H:%M:%S.",mktime(a[1])+12+3*60)a[2]) 来避免这种情况发生。
    猜你喜欢
    • 1970-01-01
    • 2021-12-19
    • 2011-10-30
    • 2018-02-12
    • 2018-05-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多