Time 如何使用awk分析时间跟踪报告?
我用两个很棒的工具追踪我的时间,还有。用这个 可以生成如下所示的报告:Time 如何使用awk分析时间跟踪报告?,time,awk,time-tracking,Time,Awk,Time Tracking,我用两个很棒的工具追踪我的时间,还有。用这个 可以生成如下所示的报告: 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-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-interest-in/
我知道这在awk
中是可能的。但我不知道如何1)将分钟+小时相加,2)为awk提供“带空格的任务名称”作为变量
更新:
我还使用+标签标记我的任务,以标记不同的项目(如第一个任务+项目标签
)。因此,用一个特定的标签将所有任务所花费的时间相加也是很好的
谢谢你的帮助 运行此脚本之前。请取消注释相应的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"
}
}
开始{
FS=“[(\t)]”
}
/^\t/{
行=$0
####如果您的输入有。。。
##无标签,在每个任务中显示小时数
#gsub(/^[\t]*.*\(.*/,“”,第行)
##标记,显示每个任务中的小时数
#gsub(/^[\t]*.*\+.*/,“”,第行)
##标签,在每个标签中显示小时
#gsub(/^[^+]*\+\\\*\(.*/,“”,第行)
####
对于(i=1;i=60){m[i]=60;h[i]+}
打印i:“,(h[i]?h[i]:“0”)“小时”,m[i],“分钟”
}
}
谢谢,这很好用——只有缩进的任务行实际上应该以一个制表符开始,而不是四个空格(由于某种原因,我在示例中弄错了)。我对正则表达式有点困惑(我不是一个编码员),所以你能帮我解决这个问题吗?简单。我只是把/^/{
改为/^\t/{
在第五行。HTH@steve,您的脚本可以运行,但文件的内容是:第二个任务(2小时4分钟)
;第二个任务(2小时58分钟)
打印结果->第二个任务:4小时62分钟
@Tedee12345:我想您的数据文件中有一个打字错误。第二个任务(2小时58分钟)
应该是第二个任务(2小时8分钟)
@mart:我已经编辑了答案(很抱歉,我在电话上)。它不能在开箱即用;你必须决定你想用什么输入来做什么。你可以通过取消gsub()的注释来完成
您想使用的函数。我还更新了计算小时/分钟的方法,使事情变得更加智能。请告诉我您的想法。干杯。