我有以下一行:
for custom_field in $(jq -r '.issues[] | .fields.created' 1.json
); do
echo $custom_field
done
输出:
2018-03-06T21:24:41.000+0000
2018-03-06T22:48:47.000+0000
如何将当前日期时间与每个输出进行比较,以及是否超过3小时打印"旧"?
答案 0 :(得分:1)
首先转换并减去三个小时要容易得多。
下面的示例转换为秒,如果满足条件,则打印为true。
date_in_seconds=$(date -d $custom_field +"%s");
[ ${date_in_seconds} -gt 259200 ] && echo true;
对于date
命令的非GNU版本,您可以使用以下内容;
date_in_seconds=$(date -j -f '%Y-%m-%d %H:%M:%S' "2016-02-22 20:22:14" '+%s')
请注意,EPOCH
将于2036年1月1日展开。
答案 1 :(得分:1)
给出像
这样的输入{ "issues":
[{"id": 1, "fields": {"created": "2018-03-06T21:24:41.000+0000"}},
{"id": 2, "fields": {"created": "2018-03-06T22:48:47.000+0000"}},
{"id": 3, "fields": {"created": "2018-03-09T22:48:47.000+0000"}}]}
您可以使用内置日期操作功能打印旧记录,例如
jq -r '(now-3600*3) as $when | .issues[] |
select(.fields.created | strptime("%Y-%m-%dT%H:%M:%S.000+0000") | mktime < $when) |
[.id, .fields.created, "old"]' 1.json
最后一行可能需要调整以准确生成您想要的输出。