首页 文章

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

提问于
浏览
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/ 这样的命令 .

readsaw这对于 awk 是可能的 . 但我不知道如何1)总和分钟和2)提供"task names with spaces"作为awk的变量 .

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

谢谢你的帮助!

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"
        }
    }
    

相关问题