gpt4 book ai didi

按格式不一致的耗时字段排序(k8s 事件按事件发生后的实际时间)

转载 作者:行者123 更新时间:2023-12-05 08:28:47 25 4
gpt4 key购买 nike

已编辑

我发现自己经常查看是否有事情停止发生。为此,按时间顺序查看事件会有所帮助...

This solution 似乎 可以工作,但格式仍然让我抓狂...

我“有点”有效的解决方案 -

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

...这对我来说有点矫枉过正。

以空格分隔的左对齐字段没有前导零,仅报告 2 米以内的秒为 [0-9]+s,然后报告为 [0-9]+ m[0-9]+s 最多 5m,之后似乎只报告 [0-9]+m

谁有一个简短的,甚至可能是简单的,更容易阅读的有效解决方案?
没有偏好的工具(sedawkperl、原生 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 ...

我已经任意转换为现有通用输出格式的标准化版本,只是为了使其易于转移给团队的其他成员。无论哪种方式,它都仅用于“观察”数据,因此只要易于阅读,其他格式都不是问题。

虽然理论上可能包括数小时和数天,但此工具通常不会报告此类旧事件,并且超出此问题的范围,如果需要,我可能可以推断出所提供的任何解决方案。因为我可以this approach得到订单我真的只是在寻找优雅的格式设置选项。

对 Daweo 的 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 ...

其他人仍然赞赏。

最佳答案

我会先将所有内容转换为秒,然后将其打印为 HH:MM:SS,例如:

$ cat tst.awk
BEGIN {
split("h m s",denoms)
fmts["s"] = fmts["m"] = fmts["h"] = "%02d"
mults["s"] = 1
mults["m"] = 60
mults["h"] = 60 * 60
}
sub(/^L/,"_L") {
print
next
}
{
time = $1

secs = 0
while ( match(time,/[0-9]+./) ) {
value = substr(time,1,RLENGTH-1)
denom = substr(time,RLENGTH)
time = substr(time,RLENGTH+1)
secs += value * mults[denom]
}

for ( i=1; i in denoms; i++ ) {
denom = denoms[i]
out = (i>1 ? out ":" : "") sprintf(fmts[denom],int(secs/mults[denom]))
secs %= mults[denom]
}

$1 = out

print | "sort -r"
}

$ awk -f tst.awk sample
_LAST ...
00:46:00 ...
00:02:22 ...
00:01:59 ...
00:01:15 ...
00:00:28 ...
00:00:07 ...

如果您想包括天数,显然要在 BEGIN 部分添加 "d" 的定义,对于其他更长的持续时间也类似。

关于按格式不一致的耗时字段排序(k8s 事件按事件发生后的实际时间),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74790350/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com