0

todotxtpunchという 2 つの優れたツールを使用して時間を記録しています。これらを使用すると、次のようなレポートを生成できます。

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)

私の質問: この種の出力を分析する便利な方法は何ですか? たとえば、「最初のタスク」/「2 番目のタスク」に費やされた時間を合計したり、「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 に答える