计算在线会议的总时间

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 &gt;= 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 了解下一步该做什么,如果您有后续问题,请随时发布新的后续问题。

以上是关于计算在线会议的总时间的主要内容,如果未能解决你的问题,请参考以下文章

云计算产业链声网Agora 20Q2 电话会议纪要

如何计算并计算 PIG 中的总平均值

如何计算多个 android webview 所花费的总时间?

为啥使用goroutine后计算任务的总时间基本一样

计算不重叠的总时间[关闭]

如何计算条目列表之间的总时间?