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

编写Awk命令检查nodestat输出的多条件状态

解决方案

没问题,我来帮你搞定这个Awk命令,完全贴合你的需求。先直接上可运行的代码,再一步步拆解逻辑:

BEGIN {
    # 获取昨日0点整的Unix时间戳,作为时间判断的基准
    "date -d 'yesterday 00:00:00' +%s" | getline yesterday_ts
    close("date -d 'yesterday 00:00:00' +%s")
    ok = 1  # 默认状态为符合所有条件
}

# 处理第一行数据
NR == 1 {
    split($0, fields, /,/)  # 按逗号拆分每行内容到数组
    # 检查第一列是否匹配指定文本
    if (fields[1] != "node mode : produce") {
        ok = 0
    }
    # 将第二列的时间字符串转为Unix时间戳(方便数字对比)
    cmd = "date -d \"" fields[2] "\" +%s"
    cmd | getline current_ts
    close(cmd)
    # 时间对比:如果当前时间不早于昨日0点,标记为不符合
    if (current_ts >= yesterday_ts) {
        ok = 0
    }
}

# 处理第二行数据
NR == 2 {
    split($0, fields, /,/)
    if (fields[1] != "node status: active") {
        ok = 0
    }
    cmd = "date -d \"" fields[2] "\" +%s"
    cmd | getline current_ts
    close(cmd)
    if (current_ts >= yesterday_ts) {
        ok = 0
    }
}

# 最终输出结果
END {
    print ok ? "OK" : "NOT OK"
}

关键逻辑拆解

  • 时间基准处理:在BEGIN块里调用系统date命令,拿到昨日0点的Unix时间戳——这样不管当前是几点,都能准确判断目标时间是否属于"昨日及之前",而不是简单的24小时前。
  • 字段拆分:用split函数把每行的逗号分隔内容拆成数组,fields[1]对应第一列,fields[2]对应第二列,方便提取和判断。
  • 时间对比:Unix时间戳是数字形式(从1970年至今的秒数),直接用大小对比就能快速判断时间先后。只要当前行的时间戳大于等于昨日0点的戳,就说明不满足"早于昨日"的条件。
  • 资源清理:每次调用date命令后用close(cmd)关闭管道,避免Awk占用过多系统资源。

使用方式

如果你的nodestat输出已经保存到文件(比如node_status.txt),可以这样运行:

awk -f check_node.awk node_status.txt

也可以直接管道对接nodestat命令,适合临时检查:

nodestat | awk 'BEGIN { "date -d '\''yesterday 00:00:00'\'' +%s" | getline yesterday_ts; close("date -d '\''yesterday 00:00:00'\'' +%s"); ok=1 } NR==1 { split($0,fields,/,/); if(fields[1]!="node mode : produce") ok=0; cmd="date -d \""fields[2]"\" +%s"; cmd|getline ts; close(cmd); if(ts>=yesterday_ts) ok=0 } NR==2 { split($0,fields,/,/); if(fields[1]!="node status: active") ok=0; cmd="date -d \""fields[2]"\" +%s"; cmd|getline ts; close(cmd); if(ts>=yesterday_ts) ok=0 } END { print ok?"OK":"NOT OK" }'

小提醒

如果nodestat输出的第二列时间格式比较特殊(比如不是系统date能直接识别的格式),你可能需要调整date -d的参数,或者在Awk里手动解析日期字符串生成时间戳。一般常见的格式(如YYYY-MM-DD HH:MM:SS、MM/DD/YYYY)都能被date正常识别。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 09:06:52