Time 如何使用awk分析时间跟踪报告?

Time 如何使用awk分析时间跟踪报告?,time,awk,time-tracking,Time,Awk,Time Tracking,我用两个很棒的工具追踪我的时间,还有。用这个 可以生成如下所示的报告: 2012-11-23 (2 hours 56 minutes): first task (52 minutes) second task (2 hours 4 minutes) 2012-11-24 (2 hours 8 minutes): second task (2 hours 8 minutes) 我的问题是:分析这种输出的便捷方法是什么?例如。 我如何总结完成“第一项任务”/“第二项任务”所

我用两个很棒的工具追踪我的时间,还有。用这个 可以生成如下所示的报告:

2012-11-23 (2 hours 56 minutes):
    first task (52 minutes)
    second task (2 hours 4 minutes)
2012-11-24 (2 hours 8 minutes):
    second task (2 hours 8 minutes)
我的问题是:分析这种输出的便捷方法是什么?例如。 我如何总结完成“第一项任务”/“第二项任务”所花费的时间,或找出答案 我在较长时期内的总工作时间,如“2012-11-*”

因此,我想要一个命令,比如
punch.sh report/regex-for-date-or-task-I-interest-in/

我知道这在
awk
中是可能的。但我不知道如何1)将分钟+小时相加,2)为awk提供“带空格的任务名称”作为变量

更新: 我还使用
+标签标记我的任务,以标记不同的项目(如
第一个任务+项目标签
)。因此,用一个特定的标签将所有任务所花费的时间相加也是很好的


谢谢你的帮助

运行此脚本之前。请取消注释相应的
gsub()
函数。运行方式如下:

awk -f script.awk file
script.awk的内容

BEGIN {
    FS="[( \t)]"
}

/^\t/ {
    line = $0

#### If your input has...

##   No tags, show hrs in each task
#    gsub(/^[\t ]*| *\(.*/,"",line)

##   Tags, show hrs in each task
#    gsub(/^[\t ]*| *\+.*/,"",line)

##   Tags, show hrs in each tag
#    gsub(/^[^+]*\+| *\(.*/,"",line)

####

    for(i=1;i<=NF;i++) {
        if ($i == "hours") h[line]+=$(i-1)
        if ($i == "minutes") m[line]+=$(i-1)
    }
}

END {
    for (i in m) {
        while (m[i] >= 60) { m[i]-=60; h[i]++ }
        print i ":", (h[i] ? h[i] : "0") " hrs", m[i], "mins"
    }
}
开始{
FS=“[(\t)]”
}
/^\t/{
行=$0
####如果您的输入有。。。
##无标签,在每个任务中显示小时数
#gsub(/^[\t]*.*\(.*/,“”,第行)
##标记,显示每个任务中的小时数
#gsub(/^[\t]*.*\+.*/,“”,第行)
##标签,在每个标签中显示小时
#gsub(/^[^+]*\+\\\*\(.*/,“”,第行)
####
对于(i=1;i=60){m[i]=60;h[i]+}
打印i:“,(h[i]?h[i]:“0”)“小时”,m[i],“分钟”
}
}

谢谢,这很好用——只有缩进的任务行实际上应该以一个制表符开始,而不是四个空格(由于某种原因,我在示例中弄错了)。我对正则表达式有点困惑(我不是一个编码员),所以你能帮我解决这个问题吗?简单。我只是把
/^/{
改为
/^\t/{
在第五行。HTH@steve,您的脚本可以运行,但文件的内容是:
第二个任务(2小时4分钟)
第二个任务(2小时58分钟)
打印结果->
第二个任务:4小时62分钟
@Tedee12345:我想您的数据文件中有一个打字错误。
第二个任务(2小时58分钟)
应该是
第二个任务(2小时8分钟)
@mart:我已经编辑了答案(很抱歉,我在电话上)。它不能在开箱即用;你必须决定你想用什么输入来做什么。你可以通过取消
gsub()的注释来完成
您想使用的函数。我还更新了计算小时/分钟的方法,使事情变得更加智能。请告诉我您的想法。干杯。