0

我正在使用两个很棒的工具,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/.

阅读看到这是可能的awk。但我不知道如何 1)总结分钟 + 小时和 2)提供“带空格的任务名称”作为 awk 的变量。

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

谢谢你的帮助!

4

1 回答 1

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"
    }
}
于 2012-11-25T06:33:46.217 回答