我正在编写一个 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 个虚拟机,我需要找到在已捕获的纪元时间戳之前重新创建的虚拟机。谢谢!
给定示例中的“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"