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

按实际时长排序K8s事件:优化格式混乱的排序方案

优化K8s事件时间格式化与排序方案需求

我经常需要查看某些事件是否已停止发生,按时间顺序查看事件会很有帮助。

有个方案似乎可行,但格式问题仍让我头疼。

我目前“勉强能用”的方案如下:

kubectl get events |
  sed -E '/^[6789][0-9]s/{h; s/^(.).*/\1/; y/6789/0123/; s/^(.)/01m\1/;
                          x; s/^.(.*)/\1/; H;
                          x; s/\n//; };
          s/^10([0-9]s)/01m4\1/; s/^11([0-9]s)/01m5\1/; s/^([0-9]s)/00m0\1/; s/^([0-9]+s)/00m\1/;
          s/^([0-9]m)/0\1/; s/^([0-9]+m)([0-9]s)/\10\2/;
          s/^L/_L/;' | sort -r

但我觉得这个方案有些小题大做。

K8s事件的时长字段为左对齐、空格分隔,无前置零:2分钟以内仅显示[0-9]+s,2到5分钟显示[0-9]+m[0-9]+s,5分钟以上仅显示[0-9]+m。

有没有更简短、易懂且有效的解决方案?
不限制工具(sed、awk、perl、原生bash等),只要能正常运行且在常用环境中已预装即可。

这不是优先级很高的需求,但算是个有趣的小挑战,我想分享出来。

测试数据

$: cat sample
LAST ...
28s ...
2m22s ...
46m ...
7s ...
75s ...
119s ...

期望输出结果

$: sed -E '/^[6789][0-9]s/{h; s/^(.).*/\1/; y/6789/0123/; s/^(.)/01m\1/;
                           x; s/^.(.*)/\1/; H;
                           x; s/\n//; };
           s/^10([0-9]s)/01m4\1/; s/^11([0-9]s)/01m5\1/; s/^([0-9]s)/00m0\1/; s/^([0-9]+s)/00m\1/;
           s/^([0-9]m)/0\1/; s/^([0-9]+m)([0-9]s)/\10\2/;
           s/^L/_L/;' sample | sort -r
_LAST ...
46m ...
02m22s ...
01m59s ...
01m15s ...
00m28s ...
00m07s ...

我将格式统一为现有输出的标准化版本,方便团队成员使用。由于仅用于人工查看数据,其他易读格式也可接受。

理论上可能存在小时和天级别的事件,但这类旧事件通常不会被该工具返回,不在本次问题范围内。我已能通过相关方案实现排序,现寻求更优雅的格式化方案。

我基于awk方案做了笨拙的适配,实现了格式化:

$: awk '/^[0-9]/{ if($1!~/m/){$1="0m" $1}; split($1,arr,/m/);
        t=arr[1]*60+arr[2]; m=(t-(t%60))/60; s=t-(m*60);
        m=sprintf("%02dm",m); if(s){ s=sprintf("%02ds",s) } else s="";
        $1=sprintf("%s%s",m,s); print; } /^L/{print "_"$0}' sample |
   sort -r
_LAST ...
46m ...
02m22s ...
01m59s ...
01m15s ...
00m28s ...
00m07s ...

仍欢迎其他方案。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 23:20:27