求筛选运行时长超6分钟K8s Pod的正则表达式
筛选AGE大于6分钟的Pod的正确Awk写法
你的原有Awk命令awk '$NF !~ /[0-6][ms]/ { print }' file.txt逻辑存在漏洞,无法正确排除秒级和0-6分钟的Pod,原因是:
- 正则仅排除以0-6开头且单位为m/s的AGE,但像
125s这类开头数字不在0-6范围内的秒级记录会被错误保留(实际125s仅约2分钟) - 未区分时间单位的实际时长,判断逻辑不严谨
正确的Awk命令
NR==1 {print; next} { age = $NF value = substr(age, 1, length(age)-1) unit = substr(age, length(age)) if ((unit == "m" && value > 6) || unit ~ /[hd]/) { print } }
命令逻辑说明
- 先打印表头行(
NR==1表示第一行) - 对每一行数据,拆分AGE字段的数值和单位:
value提取AGE中的数字部分unit提取末尾的时间单位(m/s/h/d等)
- 判断条件:
- 若单位是分钟(m),仅保留数值大于6的记录
- 若单位是小时(h)、天(d)等更大的单位,直接保留(这类时长必然超过6分钟)
- 秒级(s)记录全部排除(即使是360s也仅等于6分钟,不符合"大于"要求)
执行结果
用你的测试文件执行上述命令,输出符合预期:
NAMESPACE NAME READY STATUS RESTARTS AGE util tomcat-1 0/1 Running 0 38m util tomcat-2 0/1 Running 0 15m util tomcat-3 0/1 Running 0 7m
内容的提问来源于stack exchange,提问作者Ajay
相关产品推荐
相关产品推荐

