You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Shell脚本实现按用户汇总unreserved与reserved数值及总和

需求说明

我有如下日志数据:

KEY v2025.10: user1 0/2 at 03/06 14:00  (handle: e01)
KEY v2025.10: user1 1/2 at 03/06 14:01  (handle: f01)
KEY v2025.10: user2 0/1 at 03/06 14:01  (handle: 1001)
KEY v2025.10: user3 1/0 at 03/06 14:01  (handle: 1081)
KEY v2025.10: user4 1/100 at 03/06 14:02  (handle: 11c1)
KEY v2025.10: user5 1/1 at 03/06 14:02  (handle: 1201)

数据字段格式为:KEY v2025.10 $user $unreserved/$reserved at...,其中:

  • $user:用户名
  • $unreserved:未预留数值
  • $reserved:已预留数值

需要完成两个目标:

  1. 按$user分别汇总$unreserved和$reserved的总和,示例输出如下:
user1 unreserved =1
user1 reserved =4
user2 unreserved =0
user2 reserved =1
user3 unreserved =1
user3 reserved =0
user4 unreserved =1
user4 reserved =100
user5 unreserved =1
user5 reserved =1
  1. 计算所有$unreserved和$reserved的总和(本例总和为110)

我尝试了如下脚本,但无法得到预期结果:

grep handle | awk -F' ' '$1!=p{ if (NR>1) print p, s; p=$1; s=0} {s+=$12} END{print p, s}' | sort | uniq -c | sort -n

解决方案

可以用单条awk命令完成所有需求,无需额外管道命令:

awk -F'[: /]' '{
    user = $3
    unr = $4
    res = $5
    # 按用户累加未预留和已预留值
    unreserved_sum[user] += unr
    reserved_sum[user] += res
    # 累加全局总和
    total += unr + res
}
END {
    # 输出每个用户的汇总结果
    for (u in unreserved_sum) {
        printf "%s unreserved =%d\n", u, unreserved_sum[u]
        printf "%s reserved =%d\n", u, reserved_sum[u]
    }
    # 输出全局总和
    printf "\nTotal sum of unreserved and reserved: %d\n", total
}' your_log_file.txt

命令解释

  • -F'[: /]':设置分隔符为冒号、空格和斜杠,直接提取$user(第3字段)、$unreserved(第4字段)、$reserved(第5字段)
  • 用两个关联数组unreserved_sum和reserved_sum分别存储每个用户的未预留、已预留累加值
  • 用变量total累加所有数值的总和
  • 在END块中遍历数组输出每个用户的结果,再输出全局总和

执行结果

运行上述命令后,会得到如下输出:

user1 unreserved =1
user1 reserved =4
user2 unreserved =0
user2 reserved =1
user3 unreserved =1
user3 reserved =0
user4 unreserved =1
user4 reserved =100
user5 unreserved =1
user5 reserved =1

Total sum of unreserved and reserved: 110

内容的提问来源于stack exchange,提问作者Vivek

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 20:22:33