从UTC转换为epoch shell脚本或awk

时间:2015-09-30 13:51:40

标签: linux bash shell awk

好的,所以我有一些测试条目现在运行了很长时间,我可以从日志中获取开始时间

func filterByUserName(fu []FullUser, su []SimpleUser) (out []FullUser) {
    f := make(map[string]struct{}, len(su))
    for _, u := range su {
        f[u.UserName] = struct{}{}
    }
    for _, u := range fu {
        if _, ok := f[u.UserName]; ok {
            out = append(out, u)
        }
    }
    return
}

我希望后续条目之间的时间不同,这可能会给我每个测试执行所花费的时间。是否有任何内置的awk命令可以用来将这些命令转换为纪元,这样我就可以很容易地计算差异了?

什么是更好的方法?单行命令会很棒。

2 个答案:

答案 0 :(得分:1)

将每行转换为等效的unix时间戳

while IFS=: read dt1 dt2 dt3 _; do date -d "$dt1:$dt2:$dt3" '+%s'; done < file.log
1443518499
1443520692
1443520738
1443523006
1443525026
1443527555
1443529177
1443531724
1443534941
1443534971
1443534977
1443534981

要在每行使用之间以秒为单位打印差分时间:

while IFS=: read dt1 dt2 dt3 _; do
   ts=$(date -d "$dt1:$dt2:$dt3" '+%s')
   [[ $pt ]] && echo $((ts-pt))
   pt="$ts"
done < file.log

<强>输出:

2193
46
2268
2020
2529
1622
2547
3217
30
6
4

答案 1 :(得分:1)

单线perl解决方案:

2193
46
2268
2020
2529
1622
2547
3217
30
6
4

输出:

-n
  • -l循环输入文件的每一行,不自动打印行

  • -a在处理之前删除换行符,然后将其添加回来

  • -e autosplit模式 - 将输入行拆分为@F数组。默认为在空格上拆分

  • date -d执行perl代码

前4个以空格分隔的字段将发送到$d以返回epochseconds 打印当前行$p与上一行var results=db.People.Where(p=>p.Jobs.Any(j=>j.time>6));

之间的差异