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

用COUNTIF统计5万行日志中1ms内出现3次记录的次数

统计1ms内产生3条日志的次数

核心思路

将日志时间转换为可计算的毫秒级数值,通过滑动窗口检查连续3条日志的时间范围是否在1ms内,统计符合条件的组数。

具体步骤

  1. 时间格式转换
    把日志中的HH:MM:SS.sss AM/PM格式转换为当天的毫秒级时间戳,方便计算时间差。示例Python代码:

    from datetime import datetime
    
    def convert_to_ms(time_str):
        # 解析带AM/PM的时间字符串
        dt = datetime.strptime(time_str.strip(), "%I:%M:%S.%f %p")
        # 计算从当天0点开始的总毫秒数
        total_ms = dt.hour * 3600 * 1000 + dt.minute * 60 * 1000 + dt.second * 1000 + dt.microsecond // 1000
        return total_ms
    
  2. 滑动窗口统计
    遍历转换后的毫秒数组,从第3个元素开始,检查当前元素与前两个元素的时间差是否≤1ms(只要最晚和最早的时间差不超过1ms,就说明3条都在1ms窗口内)。示例代码:

    def count_target_groups(ms_list):
        count = 0
        if len(ms_list) < 3:
            return 0
        # 遍历所有连续3条的组合
        for i in range(2, len(ms_list)):
            if ms_list[i] - ms_list[i-2] <= 1:
                count += 1
        return count
    
  3. 处理5万行日志
    读取日志文件,清洗掉空行后批量转换为毫秒数组,再调用统计函数得到结果:

    # 读取日志(假设日志文件名为log.txt)
    with open("log.txt", "r") as f:
        lines = [line for line in f if line.strip()]
    # 转换为毫秒数组
    ms_array = [convert_to_ms(line) for line in lines]
    # 统计次数
    result = count_target_groups(ms_array)
    print(f"1ms内出现3条日志的次数:{result}")
    

注意事项

  • 若日志存在跨天情况,需在时间字符串中补充日期信息,避免时间计算错误
  • 连续多条日志在1ms内时,会按连续3条的组合分别计数(比如4条连续符合条件会计2次)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 15:12:45