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

时间:2012-11-25 00:31:01

标签: time awk time-tracking

我正在使用两个很棒的工具todotxtpunch来跟踪我的时间。有了这一个             可以生成如下所示的报告:

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'm-interested-in/这样的命令。

readsaw awk可以实现这一点。但我不知道如何1)总和分钟+小时和2)提供“空格任务名称”作为awk的变量。

更新 我还使用+tags标记我的任务以标记不同的项目(如first task +projecttag中所示)。因此,将所有任务花费在特定标签上的时间总结也很棒。

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

在运行此脚本之前。请取消注释相应的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"
    }
}