Как анализировать отчеты по времени с помощью awk?

Я отслеживаю свое время с помощью двух отличных инструментов: todotxt и punch. С их помощью можно создавать отчеты, которые выглядят так:

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). Поэтому было бы неплохо суммировать время, потраченное на все задачи, с определенным тегом.

Спасибо за любую помощь!

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"
    }
}
Другие вопросы по тегам