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

如何在命令行使用awk按日期汇总OK与KO的累计数值

用awk按日期汇总OK/KO数值

需求说明

现有如下格式的日志数据,需要按日期汇总每日的OK和KO总数:

date numbersofOK numbersofKO's
2022/09/27::15:39:00 OK's=8 KO's=15
2022/09/27::16:38:52 OK's=8 KO's=12
2022/09/28::23:37:33 OK's=0 KO's=0
2022/09/28::00:37:22 OK's=1 KO's=2

期望得到按日期分组的汇总结果(注:原始数据中2022/09/28的OK总数实际为1,示例中写的4应为笔误):

date numbers of OK numbers of KO's
2022/09/27 16 27
2022/09/28 1 2

解决方案

可以用以下awk命令实现汇总:

方式1:编写awk脚本文件

创建脚本文件sum_ok_ko.awk,内容如下:

BEGIN {
    # 输出对齐格式的表头
    printf "%-12s %-16s %-16s\n", "date", "numbers of OK", "numbers of KO's"
}
# 跳过原始数据的第一行表头,处理数据行
NR > 1 {
    # 提取日期:将第一列按"::"分割,取前半部分
    split($1, date_arr, "::")
    curr_date = date_arr[1]
    # 提取OK数值:去掉"OK's="前缀
    ok_val = substr($2, 5)
    # 提取KO数值:去掉"KO's="前缀
    ko_val = substr($3, 5)
    # 按日期累加对应数值
    total_ok[curr_date] += ok_val
    total_ko[curr_date] += ko_val
}
END {
    # 遍历所有日期,输出汇总结果
    for (date in total_ok) {
        printf "%-12s %-16d %-16d\n", date, total_ok[date], total_ko[date]
    }
}

运行命令(假设数据文件为data.log):

awk -f sum_ok_ko.awk data.log

方式2:单行命令直接运行

如果不想单独写脚本文件,可直接执行单行命令:

awk 'BEGIN{printf "%-12s %-16s %-16s\n", "date", "numbers of OK", "numbers of KO'\''s"} NR>1{split($1,d,"::"); ok=substr($2,5); ko=substr($3,5); total_ok[d[1]]+=ok; total_ko[d[1]]+=ko} END{for(d in total_ok) printf "%-12s %-16d %-16d\n", d, total_ok[d], total_ko[d]}' data.log

运行结果

执行后会输出:

date        numbers of OK     numbers of KO's   
2022/09/27  16                27                
2022/09/28  1                 2                 

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 10:10:23