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

awk按模式解析文本 仅输出单条auth msg对应连接记录的方法

问题根因

你写的原脚本运行不符合预期,核心是三处错误:

  • 字段索引取值错误:连接行格式为This connection from x.x.x.x,IP是第4个字段,你代码里取的$6是空值;auth消息行格式为auth msg from XXX,来源标识是第4个字段,你取的第8个字段不存在对应内容
  • 判断逻辑有缺陷:仅用getline读取连接行的下一行做判断,既没有统计该连接后续auth消息的总条数,也没有处理两条连接行之间穿插多条auth、或者连接行后直接跟新连接行的场景
  • 遗漏了文件末尾的记录判断:如果最后一条连接符合输出规则,原脚本完全不会处理到
正确awk实现

实现逻辑:逐行遍历日志,遇到连接行时先校验上一条暂存的连接是否满足「恰好1条auth消息」的输出条件,满足就输出结果;之后暂存当前新连接的IP,重置auth计数和来源缓存。遍历过程中遇到auth消息行时,仅给当前暂存的连接累加auth计数、缓存来源。所有行遍历完成后,再补校验最后一条暂存的连接是否符合输出条件。

awk '
/connection from/ {
    # 先处理上一个暂存的连接记录
    if (current_ip != "") {
        if (auth_count == 1) {
            print current_ip, auth_src
        }
    }
    # 初始化当前新连接的缓存
    current_ip = $4
    auth_count = 0
    auth_src = ""
    next
}
/auth msg from/ {
    # 仅在存在待匹配连接时统计auth信息
    if (current_ip != "") {
        auth_count++
        auth_src = $4
    }
    next
}
END {
    # 处理文件末尾最后一条暂存的连接
    if (current_ip != "" && auth_count == 1) {
        print current_ip, auth_src
    }
}
' 你的日志文件路径
效果验证

用你提供的样例输入执行上述脚本,输出结果和预期完全一致:

x.x.x.x BBB
y.y.y.x CCC
x.x.x.a ZZZ

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 00:01:08