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

离线环境下自动化统计设备日志的连接时长与连接次数

实现方案

1. 保留原CSV生成流程

先把你原来的脚本保留不动,继续生成raw_events.csv用来手动核查,我们在这个文件基础上做自动化计算。

2. 用Awk实现自动化统计

写个Awk脚本读取raw_events.csv,跟踪每个设备的连接时间,自动计算每次连接的时长,最后累加总时长和连接次数。

完整脚本示例

#!/bin/bash

# 第一步:原流程生成原始事件CSV
grep -E "(CONNECT|DISCONNECT)" /path/to/daily.log > raw_events.csv

# 第二步:用Awk计算统计结果
awk -F ',' '
# 先输出表头
BEGIN {
    print "设备ID,总连接时长(秒),连接次数"
}

# 处理每一行记录
{
    time_str = $1 " " $2
    device = $3
    event = $4

    # 把时间字符串转成Unix时间戳(秒),方便计算时长
    cmd = "date -d \"" time_str "\" +%s"
    cmd | getline timestamp
    close(cmd)

    # 遇到连接事件,记录该设备的连接时间戳
    if (event == "CONNECT") {
        connect_time[device] = timestamp
    }
    # 遇到断开事件,计算本次连接时长并累加
    else if (event == "DISCONNECT" && connect_time[device] != "") {
        duration = timestamp - connect_time[device]
        total_duration[device] += duration
        connect_count[device] += 1
        # 清空连接时间,避免重复计算
        delete connect_time[device]
    }
}

# 所有行处理完后,输出统计结果
END {
    for (device in total_duration) {
        printf "%s,%d,%d\n", device, total_duration[device], connect_count[device]
    }
}
' raw_events.csv > device_stats.csv

重点细节说明

  • 时间转换:用date -d把日志里的时间字符串转成时间戳,直接相减就能得到秒级时长。如果是BSD系统(比如Mac),date不支持-d参数,安装coreutils后用gdate代替即可。
  • 状态跟踪:用数组connect_time存储每个设备的连接时间戳,断开时计算完时长就清空该设备的记录,避免异常日志(比如连续两条断开事件)导致错误计算。
  • 结果格式:输出依然是CSV格式,和原文件风格一致,不管是直接查看还是导入表格工具都方便。

3. 处理异常场景

  • 如果日志存在只记录断开、无对应连接的情况:脚本会自动忽略,因为没有匹配的连接时间戳,不会执行计算逻辑。
  • 如果日志存在设备连接后未记录断开的情况:可以在END块中添加提醒逻辑,把这类设备输出到错误流:
END {
    # 输出未断开的设备到错误输出
    for (device in connect_time) {
        printf "警告:设备 %s 存在未断开的连接\n", device > "/dev/stderr"
    }
    # 输出正常统计结果
    for (device in total_duration) {
        printf "%s,%d,%d\n", device, total_duration[device], connect_count[device]
    }
}

4. 运行脚本

给脚本添加执行权限:

chmod +x device_stats.sh

每日运行该脚本,就能同时生成raw_events.csv(用于手动核查)和device_stats.csv(自动化统计结果)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 05:30:53