Logging 如何计算在AWK中完成任务所花费的时间和分钟?

Logging 如何计算在AWK中完成任务所花费的时间和分钟?,logging,awk,timestamp,gawk,time-tracking,Logging,Awk,Timestamp,Gawk,Time Tracking,时间跟踪工具生成包含任务和时间戳的时间日志,如“yyyymmddThhmmss”: 如何计算正则表达式中指定的每个任务所花费的总小时和分钟数?例如,要将包含my regex的任务所花费的时间相加,awk或gawk命令如下: awk '/my-regex/ { summing-of-corresponding-timestamps }' logfile.log 这是一个补充——我意识到我需要一个更“健壮”的、基于正则表达式的解决方案。但我不是一个编码员,所以在AWK中计算分钟和小时数让我很困惑。

时间跟踪工具生成包含任务和时间戳的时间日志,如“yyyymmddThhmmss”:

如何计算正则表达式中指定的每个任务所花费的总小时和分钟数?例如,要将包含
my regex
的任务所花费的时间相加,
awk
gawk
命令如下:

awk '/my-regex/ { summing-of-corresponding-timestamps }' logfile.log

这是一个补充——我意识到我需要一个更“健壮”的、基于正则表达式的解决方案。但我不是一个编码员,所以在AWK中计算分钟和小时数让我很困惑。谢谢你的帮助

用GNU awk试试这个,我还没有检查数学:

$ cat tst.awk
NR<3{ next }
{
   start = mktime(gensub(/(....)(..)(..).(..)(..)(..)/,"\\1 \\2 \\3 \\4 \\5 \\6","",$2))
   end   = mktime(gensub(/(....)(..)(..).(..)(..)(..)/,"\\1 \\2 \\3 \\4 \\5 \\6","",$3))
   dur[$1] += end - start
}
END {
   for (task in dur)
      print task, dur[task]
}
$
$ gawk -f tst.awk file
task1 3471
task2 6980
结果:

10451

用GNU awk试试这个,我还没有检查数学:

$ cat tst.awk
NR<3{ next }
{
   start = mktime(gensub(/(....)(..)(..).(..)(..)(..)/,"\\1 \\2 \\3 \\4 \\5 \\6","",$2))
   end   = mktime(gensub(/(....)(..)(..).(..)(..)(..)/,"\\1 \\2 \\3 \\4 \\5 \\6","",$3))
   dur[$1] += end - start
}
END {
   for (task in dur)
      print task, dur[task]
}
$
$ gawk -f tst.awk file
task1 3471
task2 6980
结果:

10451

awk没有任何内置的时间戳支持,因此您可能会编写一个函数来确定“开始”和“结束”时间戳之间的秒数,另一个函数以“hh:mm”的形式格式化经过的秒数。(或在线搜索;可能有人已经编写了这些函数。)通常awk是我这类工作的“go-to”语言,但对于这项特殊工作,我会认真考虑选择一种不同的语言,一种更好地支持时间戳算法的语言。谢谢你的评论。您建议使用哪种语言?如果我不能轻松地使用awk,我通常会先尝试python。GNU awk,gawk,绝对有内置的时间戳支持。请参阅mktime()、strftime()和systime()函数。@EdMorton:好的。我在这里没有傻眼。我太习惯这里的方言了,以至于有时我忘了还有其他方言。我将+1您的评论,并留下我之前的白痴作为提醒。awk没有任何内置的时间戳支持,因此您可能会编写一个函数来确定“开始”和“结束”时间戳之间的秒数,另一个函数以“hh:mm”的形式格式化经过的秒数。(或在线搜索;可能有人已经编写了这些函数。)通常awk是我这类工作的“go-to”语言,但对于这项特殊工作,我会认真考虑选择一种不同的语言,一种更好地支持时间戳算法的语言。谢谢你的评论。您建议使用哪种语言?如果我不能轻松地使用awk,我通常会先尝试python。GNU awk,gawk,绝对有内置的时间戳支持。请参阅mktime()、strftime()和systime()函数。@EdMorton:好的。我在这里没有傻眼。我太习惯这里的方言了,以至于有时我忘了还有其他方言。我将+1你的评论,并留下我先前的白痴作为提醒。谢谢!但是,这似乎不适用于包含多个单词的任务。另外,我的主要目标是能够根据正则表达式过滤日志文件,我将正则表达式作为gawk脚本的一个绘图。在此之后,脚本将计算使用正则表达式指定的所有内容所花费的时间。换句话说,一个命令,例如
gawk-f tst.awk file REGEX
。awk允许这种参数输入吗?你说的“包含多个单词的任务”是什么意思?任务名称可以包含空格吗?如果是这样,您如何判断任务名称何时结束以及下一个字段何时开始?字段实际上是由制表符分隔还是由其他字符分隔?是的,你可以使用RE。一旦你回答了这些问题,我相信你会得到一些答案,与此同时,我在我的答案中添加了一些东西,向你展示了一般的做法。@mart:没问题!别忘了把这个答案标为已解决。干杯@埃德:是的,这就是我的意思——任务名称有空格。它们之间用标签隔开@史提夫:再次谢谢你!这很有效。我稍微修改了
print
语句——现在它以小时而不是秒来显示结果。非常适合我,谢谢!但是,这似乎不适用于包含多个单词的任务。另外,我的主要目标是能够根据正则表达式过滤日志文件,我将正则表达式作为gawk脚本的一个绘图。在此之后,脚本将计算使用正则表达式指定的所有内容所花费的时间。换句话说,一个命令,例如
gawk-f tst.awk file REGEX
。awk允许这种参数输入吗?你说的“包含多个单词的任务”是什么意思?任务名称可以包含空格吗?如果是这样,您如何判断任务名称何时结束以及下一个字段何时开始?字段实际上是由制表符分隔还是由其他字符分隔?是的,你可以使用RE。一旦你回答了这些问题,我相信你会得到一些答案,与此同时,我在我的答案中添加了一些东西,向你展示了一般的做法。@mart:没问题!别忘了把这个答案标为已解决。干杯@埃德:是的,这就是我的意思——任务名称有空格。它们之间用标签隔开@史提夫:再次谢谢你!这很有效。我稍微修改了
print
语句——现在它以小时而不是秒来显示结果。非常适合我。
10451