将人类可读时间转换为与 jq 内联的纪元以进行时间比较

问题描述 投票:0回答:1

我正在编写一个 bash 脚本,将虚拟机创建日期与上一步中收集的纪元时间进行比较,以查看在特定日期之前重新创建了哪些虚拟机。这些是 bosh 虚拟机,提供人类可读的时间。示例:UTC 2024 年 7 月 16 日星期五 17:34:44

要获取虚拟机创建日期的列表,我的 bosh 命令如下所示:

bosh is --vitals --json | jq -r '.Tables[].Rows[].vm_created_at'

我需要的是这样的:

bosh is --vitals --json | jq -r '.Tables[].Rows[] | select( .vm_created_at(somehow convert to epoch) < $epoch_from_previous_step).instance_name'

我不确定该命令是否可行。或者我是否必须将每一个都拉出来并进行转换……很难让我的头脑理解它。 我正在运行此程序的基础上有 75 到 450 个虚拟机,我需要找到在已捕获的纪元时间戳之前重新创建的虚拟机。谢谢!

bash time jq bosh
1个回答
0
投票

给定示例中的“UTC”规范确实造成了一些复杂化。

有了 gojq,你就可以不用使用 %Z:

$ gojq -R 'strptime("%a %b %d %H:%M:%S %Z %Y")' <<< "Fri Jul 16 17:34:44 UTC 2024"

但是使用 jq 失败了。

如果所有人类可读的字符串都以相同的方式使用 UTC,您可以简单地 将 %Z 替换为 UTC:

strptime("%a %b %d %H:%M:%S UTC %Y")

如果情况并非如此,那么多种可能性之一就是结合使用 sub/2 与 %Z,例如

jq -R 'sub("UTC";"GMT") | strptime("%a %b %d %H:%M:%S %Z %Y")' <<< "Fri Jul 16 17:34:44 UTC 2024"
© www.soinside.com 2019 - 2024. All rights reserved.