【问题标题】:How to analyze time tracking reports with awk?如何使用 awk 分析时间跟踪报告?
【发布时间】:2012-11-25 00:31:00
【问题描述】:

我使用两个很棒的工具来跟踪我的时间,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)。因此,将花费在具有特定标签的所有任务上的时间相加也是很棒的。

感谢您的帮助!

【问题讨论】:

    标签: time awk time-tracking


    【解决方案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"
        }
    }
    

    【讨论】:

    • 谢谢,这很好用——只有缩进的任务行实际上应该以一个制表符开头,而不是四个空格(由于某种原因,我在示例中弄错了)。我对正则表达式有点困惑(我不是编码员),你能帮我解决这个问题吗?
    • 简单。我所做的只是将第 5 行的 /^ / { 更改为 /^\t/ {。 HTH
    • @steve,您的脚本有效,但文件内容为:second task (2 hours 4 minutes); second task (2 hours 58 minutes) 打印结果 -> second task: 4 hrs 62 mins
    • @Tedee12345:我认为您的数据文件中有错字。 second task (2 hours 58 minutes) 应该是 second task (2 hours 8 minutes)
    • @mart:我已经编辑了答案(抱歉等待,正在电话中)。它不能开箱即用;您必须决定使用什么输入来做什么。您可以通过取消注释您想要使用的 gsub() 函数来完成此操作。我还更新了计算小时/分钟的方式,使事情变得更加智能。请让我知道你在想什么。干杯。
    猜你喜欢
    • 2016-01-20
    • 2010-11-13
    • 1970-01-01
    • 2014-08-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-01
    • 2014-03-22
    相关资源
    最近更新 更多