好的,所以我有一些测试条目现在运行了很长时间,我可以从日志中获取开始时间
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命令可以用来将这些命令转换为纪元,这样我就可以很容易地计算差异了?
什么是更好的方法?单行命令会很棒。
答案 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));