如何使这个 awk 脚本更少的样板?

Mic*_*ael 2 awk refactoring

假设我有一个像这样的日志文件(第一列是时间戳):

1699740442177 Start A
1699740442177 Start B
1699740442255 Start C
1699740442261 Finish B
1699740442337 Finish C
1699740442337 Finish A
Run Code Online (Sandbox Code Playgroud)

A我想确定、B和平均花费了多少时间C。所以我写了一个awk脚本:

/Start A/ {
  startA = $1
}
/Finish A/ {
  sumA += $1 - startA
  numA++ 
}
/Start B/ {
  startB = $1
}
/Finish B/ {
  sumB += $1 - startB
  numB++ 
}
/Start C/ {
  startC = $1
}
/Finish C/ {
  sumC += $1 - startC
  numC++ 
}
END {
  print sumA/numA, sumB/numB, sumC/numC
}
Run Code Online (Sandbox Code Playgroud)

该脚本可以工作,但有点样板。您建议如何改进脚本并减少样板?

字母数量可能有所不同(最多 10-15 个字母)。Start/Finish我们可以假设同一字母对之间没有重叠。

pmf*_*pmf 5

您可以将起始时间戳、绝对总和和计数存储到数组中,所有这些都由第三列索引,并在以下位置打印出平均值END

$2 == "Start"  { t[$3] = $1; n[$3] += 1 }
$2 == "Finish" { s[$3] += $1 - t[$3] }
END { for (k in n) print "Average of", k, "is", s[k] / n[k] }
Run Code Online (Sandbox Code Playgroud)
Average of A is 160
Average of B is 84
Average of C is 82
Run Code Online (Sandbox Code Playgroud)