【发布时间】:2020-12-23 17:18:21
【问题描述】:
这是问题的后续: Calculating the total time in an online meeting
假设有一个会议,会议记录保存在 CSV 文件中。如何编写 bash 脚本/awk 脚本来找出员工在线的总时间。一名员工可以离开和重新加入会议,他/她的所有在线时间都应计算在内。 我所做的如下,但在如何将一条记录与所有其他记录进行比较,并添加每个加入和离开的人对的总时间时遇到了问题。
cat tst.awk
BEGIN { FS=" *, *"; OFS=", " }
NR==1 { next }
$1 in joined {
jt = time2secs(joined[$1])
lt = time2secs($3)
totSecs[$1] += (lt - jt)
delete joined[$1]
next
}
{ joined[$1] = $3 }
END {
for (name in totSecs) {
print name, secs2time(totSecs[name])
}
}
function time2secs(time, t) {
split(time,t,/:/)
return (t[1]*60 + t[2])*60 + t[3]
}
function secs2time(secs, h,m,s) {
h = int(secs / (60*60))
m = int((secs - (h*60*60)) / 60)
s = int(secs % 60)
return sprintf("%02d:%02d:%02d", h, m, s)
}
会议的开始时间和结束时间在命令行中给出,例如:
$ ./script.sh input.csv 10:00:00 13:00:00
只应考虑 startTime (10:00:00) 和 EndTime (13:00:00) 之间的时间。已加入但未离开的人,在结束时必须被视为已离开,并且还应添加在线时间。我试过了,但没有想要的结果。
输出应如下所示:(可以存储在输出文件中)
Bob, 02:44:00
John, 00:41:00
David, 02:50:00
James, 01:39:30
CSV文件内容如下:
Employee_name, Joined/Left, Time
David, joined, 09:40:00
David, left, 10:20:00
David, joined, 10:30:00
John, joined, 10:00:00
Bob, joined, 10:01:00
James, joined, 10:00:30
Bob, left, 10:20:00
James, left, 11:40:00
John, left, 10:41:00
Bob, joined, 10:35:00
【问题讨论】: