【问题标题】:Script to append Timetamp in each line in case of missing time stamp在缺少时间戳的情况下在每行中附加时间戳的脚本
【发布时间】:2019-04-25 11:24:10
【问题描述】:

在 GC 日志中,每一行的开头都有时间戳。但有时我们错过了这一点。

我正在寻找一个 bash 脚本来检查是否缺少时间戳,它会在开头添加一些静态时间戳。

在下面的示例中有 2 行。第一行有时间戳,但第二行没有。

2018-11-22T11:58:39.381+0100: 79412.217: [GC (Allocation Failure) 2018-11-22T11:58:39.381+0100: 79412.217: [ParNew: 1265865K->36835K(1380160K), 0.1419160 secs] 23560553K->22332825K(29206784K), 0.1421816 secs] [Times: user=2.39 sys=0.00, real=0.14 secs] 
79412.947: [GC (Allocation Failure) 2018-11-22T11:58:40.112+0100: 79412.947: [ParNew: 1263651K->36868K(1380160K), 0.1502318 secs] 23559641K->22334516K(29206784K), 0.1504887 secs] [Times: user=2.47 sys=0.00, real=0.15 secs] 
  1. 主要要求是在每行缺少时间戳时添加时间戳。
  2. Advance:在没有时间戳的情况下,有一个纪元格式的相对时间(79412.947)。我希望在每个相对时间上添加一些静态纪元时间并在开头附加。

例如在第二行:79412.947 + 153434343 = 某个值。将此值转换为时间戳格式并附加在开头。

正则表达式提取时间戳。 https://regex101.com/r/3CtU4y/1/

任何建议,有用的建议表示赞赏。提前谢谢你。

【问题讨论】:

    标签: bash timestamp


    【解决方案1】:

    第一个建议是,如果您有大量日志记录,bash 可能不是您的最佳选择。

    除此之外,编写脚本非常符合要求。所以它会是:

    1) 设置一个循环来读取输入行

    #!/bin/bash
    cat $* | while read line ; do
    

    2) 测试输入行是否以时间戳开头(无需查找您提供的正则表达式。

    if echo "$line " | grep '^[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]T[0-9][0-9]:[0-9][0-9]' ; then
        true
    

    请注意,如果条件为真,grep 将输出该行,因此不需要单独的回显。

    3)否则,用纪元时间戳做一些我不太明白你想要什么的事情:

    else
        estamp=$(echo "$line" | sed 's/:.*//')
        rol=$(echo "$line" | sed 's/[0-9.]*://)
        # Do something with adding to the timestamp that I did not grasp
        echo "$estamp:$rol"
    fi
    

    或者类似的东西。

    是的,关闭循环

    done
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-28
      • 2019-04-29
      • 1970-01-01
      • 1970-01-01
      • 2021-10-27
      • 1970-01-01
      相关资源
      最近更新 更多