【发布时间】:2014-02-06 19:06:48
【问题描述】:
我有一个手动创建的格式的日志文件
date start duration description
2/5 10:00p 1:45 Did this and that.
2/6 2:00a 0:20 Woke up from my slumber.
==============================================
2:05 TOTAL time spent
日志中有很多条目。为了避免每次添加条目时手动重新计算总时间,我编写了以下脚本:
#!/bin/bash
file=`ls | grep log`
head -n -1 $file | egrep -o [0-9]:[0-9]{2}[^ap] \
| awk '{ FS = ":" ; SUM += 60*$1 ; SUM += $2 } END { print SUM }'
首先,脚本假定只有一个文件名中包含log,这就是我要查找的文件。其次,它获取除当前总数的行之外的所有行,从行中获取时间信息,并将其提供给 awk,awk 将其转换为分钟。
这是我遇到问题的地方。最终的总和总是会略有偏差。通过反复试验,我发现awk 永远不会计算第一条记录的第二个字段,例如在这种情况下是 45 分钟。它会计算小时;它不会计算分钟数。其他记录没有这样的问题,但是第一个记录总是以分钟为单位。
什么可能导致这种行为?如何调试?
【问题讨论】: