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

AWK命令无法捕获许可证过期日期及空用户行处理咨询

修正后的AWK命令及说明

针对你提到的两个问题——无法捕获Expiry Date、输出包含空用户的无效行,以下是修正后的AWK命令,假设你的许可证日志采用字段名: 值的常见格式:

BEGIN {
    print "License Name,User,Total Number of Licenses,Number of licenses used,Expiry Date,License Checkout Date,Server name"
    FS = ": "  # 设置分隔符为冒号加空格,适配"字段名: 值"格式
}

# 逐一匹配并提取目标字段
/License Name:/       { lic_name = $2 }
/Total Number of Licenses:/ { total_lic = $2 }
/Number of licenses used:/  { used_lic = $2 }
/Expiry Date:/        { expiry = $2 }  # 新增这行专门捕获过期日期
/User:/               { user = $2 }
/License Checkout Date:/ { checkout = $2 }
/Server name:/        { server = $2 }

# 假设每条许可证记录以空行分隔,遇到空行时检查输出
/^$/ {
    # 只输出User非空的有效记录
    if (user != "") {
        printf "%s,%s,%s,%s,%s,%s,%s\n", lic_name, user, total_lic, used_lic, expiry, checkout, server
    }
    # 重置变量,避免跨记录污染
    lic_name = total_lic = used_lic = expiry = user = checkout = server = ""
}

# 处理日志末尾无空行的情况
END {
    if (user != "") {
        printf "%s,%s,%s,%s,%s,%s,%s\n", lic_name, user, total_lic, used_lic, expiry, checkout, server
    }
}

核心修正细节

  1. 解决Expiry Date捕获问题:
    新增了/Expiry Date:/ { expiry = $2 }的匹配规则,精准定位过期日期字段。如果你的日志里过期日期的标识不是Expiry Date:,比如是License Expires:,直接把正则改成/License Expires:/即可。

  2. 过滤空用户的无效行:
    在输出前加入if (user != "")判断,只有当User字段有实际值时才输出记录,直接剔除无效条目。

  3. 避免字段值污染:
    每条记录输出后重置所有变量,确保下一条记录的字段值不会和上一条混在一起。

适配你的日志格式的小调整

  • 如果日志的字段分隔符不是: (比如用=分隔),把FS = ": "改成FS = "="。
  • 如果记录不是用空行分隔,而是有特定分隔符(比如=====),把/^$/改成对应正则(比如/^=====$/)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 10:05:05