编辑
我发现自己经常看一些事情是否已经停止发生。要做到这一点,按时间顺序看事件是有帮助的...
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
......这对我来说似乎有点矫枉过正。
空格分隔的左对齐字段没有前导零,仅将秒报告为[0-9]+s
(最长2米),然后报告为[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 ...
我随意地将现有的通用输出格式转换为标准化版本,只是为了让它可以方便地传递给团队中的其他成员。无论哪种方式,它都只是用来“目测”数据,所以只要易于阅读,其他格式就不是问题。
虽然理论上可以包括小时和天,这样的旧事件通常不会被这个工具报告,并且超出了这个问题的范围,如果需要,我可以推断出任何解决方案。因为我 * 可以 * 从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 ...
其他人仍然感激。
7条答案
按热度按时间qoefvg9y1#
我会先将所有内容转换为秒,然后将其打印为
HH:MM:SS
,例如:显然,如果您想包括天,那么在
BEGIN
部分添加"d"
的定义,对于其他更长的持续时间也是如此。olhwl3o22#
我将按照以下方式利用GNU
AWK
完成此任务,让file.txt
内容那么
给出输出
说明:如果在第一个字段中没有
m
,则在m
字符处使用split
function,然后计算值:我将m
之前的内容乘以60,以转换为秒,然后加上m
之后的内容,得到以秒为单位的总数,对于没有秒部分的行,秒部分是空字符串,在算术中使用时会变为零。它给出输出
vshtjzan3#
如果示例中显示了所有可能的时间格式,这可能会起作用。它显示了文件、输出和最终排序,为了清晰起见,它们粘贴在一起。
它查找
m
,乘以60并加上任何现有的秒数,如果没有找到m
,它只打印秒数。0md85ypi4#
仅使用GNU awk:
看起来比一堆链条小汽车干净一点。上面写着:
因为我实际上认为您希望最新的条目显示在顶部附近,如果不只是将 ind_num_asc 更改为 ind_num_desc 的话。
vxf3dgd45#
使用
sed
要运行
rggaifut6#
如果您正在寻找一个通用的实用程序来“规范化”报告的值,这里有一个演示该功能的“hack”。
c8ib6hqw7#
我想感谢大家的时间和贡献。
不出所料,我学到了一些东西
一位同事看到了这一点,并私下给我发来了一个解决方案 * 非常 * 类似于this solution,来自我在问题中引用的同一页,它帮助我理解了我的问题和解决它的内置方法。我在这里转发了一些解释,希望有人会发现它有用,也许可以帮助我完善自己的理解。
我对典型输出的主要问题是时间字段的格式(imo)* 可怕 * 不一致-我假设是为了简洁,这可能是好的-排序显然是按对象而不是时间(这在许多情况下也是有意义的),然后按对象的
.lastTimestamp
排序。为了记录在案,
kubectl get --help
列出了(除此之外)注意k8s对象定义中的
The field specification is expressed as a JSONPath expression
。并且它有一个很长的选项列表,包括X1 M3 N1 X,它可以让你“自己卷”。
因此,我重新构建了正常的输出,用实际的、一致的时间戳字段替换了有问题的第一列,并更改了默认排序顺序。
更棒的是,帮助文本直接引用了相关文档,所以我很快就能将其转换为模板文件:
仍然很长,但不需要通过管道传输到另一个进程,我可以摸索逻辑。为了使它简洁,更容易输入和阅读,我做了一个别名-
现在,我可以通过在末尾添加群集和命名空间来指定它们-
我还没有弄清楚内置的过滤器,所以现在我有一个
grep
函数,用于警告-希望有人能用上它。