如何在jq中转换BOSH VM创建时间为Epoch以进行时间对比
在jq中直接转换BOSH VM创建时间为Epoch并筛选实例
你完全可以在jq命令中直接完成日期转换和筛选,不需要逐个提取处理,这种方式效率足够应对75-450台VM的规模。具体实现如下:
完整命令示例
假设你已经将目标对比Epoch时间存在TARGET_EPOCH变量中(替换为你实际的前置步骤获取值):
# 示例:生成目标时间的Epoch值(可替换为你的实际来源) TARGET_EPOCH=$(date -d "2024-07-10" +%s) # 执行BOSH查询+jq筛选 bosh instances --vitals --json | jq -r --arg epoch "$TARGET_EPOCH" ' .Tables[].Rows[] | select( ( .vm_created_at | strptime("%a %b %d %T UTC %Y") | mktime ) < ($epoch | tonumber) ) | .instance_name '
关键细节说明
- 日期格式匹配:
strptime("%a %b %d %T UTC %Y")完全对应你给出的时间格式Fri Jul 16 17:34:44 UTC 2024,确保解析不会出错 - 外部变量传递:用
--arg epoch "$TARGET_EPOCH"将Bash变量传入jq,再通过tonumber把字符串类型的Epoch转成数字用于数值比较 - 批量处理优势:jq会一次性遍历所有VM数据完成转换和筛选,避免了循环逐个处理的额外开销
如果遇到日期解析失败,先检查vm_created_at的输出格式是否和示例完全一致(比如时区是否统一为UTC、日期部分的空格格式),调整strptime的格式字符串即可。
内容的提问来源于stack exchange,提问作者cbaum
相关产品推荐
相关产品推荐

