使用 shell 脚本从日志文件中获取前 10 个值

Get top 10 values from log file using shell script

我必须通过读取一个巨大的日志文件来创建报告。

日志文件包含类似这样的数据。

为 X5356E08XWZV0ZVAE1 建立请求调用 1645167707895 1645167709644 OK
REQUEST 调用数据库:X5356E08XWZV0ZVAE2 1645167709651 1645167709748 OK
请求为 X5356E08XWZV0ZVAE3 建立呼叫 1645167709750 1645167709874 OK
请求为 X5356E08XWZV0ZVAE4 设置 Mau 准备 1645167709875 1645167709991 OK
REQUEST X5356E08XWZV0ZVAE5 1645167709992 1645167710379 KO

调用跟踪键结束点

现在,我需要编写一个 shell 脚本。如果第一列是请求,则从 NF-1 中减去 NF-2 并打印前 3 个用户。如果该行包含 KO,则忽略该行。

我正在尝试构建一个简单的逻辑 awk 但不太成功。非常感谢任何帮助。 我尝试了下面的代码,但它只是对时间进行排序,但如果第一列是 REQUEST,我也需要打印用户名。

awk ' == "REQUEST" {print $(NF-3)" "  $(NF-1) - $(NF-2)}' "path/simulation_1.log"

我收到回复了 用户 1 1000 用户2 2000 . . 我希望将响应降序排列,并且只有 10 个条目。

awk 'BEGIN {printf "Top ten User are\n"} {if ([=10=] !~ "KO" &&  == "REQUEST") {print " time taken "-" seconds" | "sort -nrk4 | head -n10 "}}'