计算在线会议的总时间
Posted
技术标签:
【中文标题】计算在线会议的总时间【英文标题】:Calculating the total time in an online meeting 【发布时间】:2020-12-23 02:48:42 【问题描述】:假设有一个会议,会议记录保存在 CSV 文件中。如何编写 bash 脚本/awk 脚本来找出员工在线的总时间。一名员工可以离开和重新加入会议,他/她的所有在线时间都应计算在内。
我所做的如下,但是卡在如何将一条记录与所有其他记录进行比较,并添加每个人加入和离开对的总时间。
#!/bin/bash
inputFile=$1
startTime=$(date -u -d $2 +"%s")
endTime=$(date -u -d $3 +"%s")
awk 'BEGIN FS=","; totalTime=0;
for (rows=1; rows <= NR; rows++)
#I am stuck here on how to compare a record with each and every record
if (($1==?? && $2=="Joined") && ($1==?? && $2=="Left"))
totalTime=$($(date -u -d $3 +"%s")-$(date -u -d $3 +"%s"))
print $1 "," $totalTime +"%H:%M:%S"
' $inputFile
会议的开始时间和结束时间在命令行中给出,例如:
$ ./script.sh input.csv 10:00:00 13:00:00
输出如下所示:(可以存储在输出文件中)
Bob, 00:30:00
John, 01:02:00
CSV文件内容如下:
Employee_name, Joined/Left, Time
John, joined, 10:00:00
Bob, joined, 10:01:00
James, joined, 10:00:30
Bob, left, 10:20:00
Bob, joined, 10:35:00
Bob, left, 11:40:00
James, left, 11:40:00
John, left, 10:41:00
Bob, joined, 11:45:00
【问题讨论】:
name=$1; if (name in names) times[name]=$3 else names[$1]=$1;times[$1]=$3
是关于如何“将记录与每条记录进行比较”的想法。 .通过awk tutorial 工作。特别注意awk
的关联数组。根据提供的数据计算经过的时间将是一个高级问题。您可能需要为此单独提出一个问题。希望您可以访问gawk v >= 4.0
。祝你好运。
将The output may look like this
下的文本块替换为您提供的示例输入的实际输出必须看起来像。
【参考方案1】:
$ 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)
.
$ awk -f tst.awk file
James, 01:39:30
Bob, 01:24:00
John, 00:41:00
如果您需要考虑 DST 转换、闰秒、一夜之间(或持续多天)的会议、会议结束时仍然在会议中的人,或者您的问题中未显示的任何其他问题 - 剩下的作为练习:-)。
【讨论】:
谢谢,对我帮助很大。我很好奇如何改进它,以便(仅必须考虑 startTime (10:00:00) 和 EndTime (13:00:00) 之间的时间。还有加入但未离开的人被视为离开在 Endtime 和他们的在线时间也应该添加)。我试过但没有想要的输出 Chameleon questions 强烈反对这个论坛。我发布的内容回答了您提出的问题,请参阅 ***.com/help/someone-answers 了解下一步该做什么,如果您有后续问题,请随时发布新的后续问题。以上是关于计算在线会议的总时间的主要内容,如果未能解决你的问题,请参考以下文章