【发布时间】: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下的文本块替换为您提供的示例输入的实际输出必须看起来像。
标签: bash shell awk sed scripting