从 Json 文件中获取最近几分钟创建的值
Get the values which are created in last few minutes from a Json file
我的 Json 文件有如下数据:
[
{
"id": 47,
"iid": 12,
"project_id": 1,
"status": "pending",
"source": "push",
"ref": "new-pipeline",
"sha": "ab23456789d",
"web_url": "https://example.com/project/pipelines/47",
"created_at": "2022-02-24T11:28:34.085Z",
"updated_at": "2016-08-24T15:32:35.169Z"
},
{
"id": 48,
"iid": 13,
"project_id": 1,
"status": "pending",
"source": "web",
"ref": "new-pipeline",
"sha": "ab23456789d",
"web_url": "https://example.com/project/pipelines/48",
"created_at": "2022-02-23T11:28:34.085Z",
"updated_at": "2016-08-23T15:32:35.169Z"
}
]
我正在尝试获取在过去 15 分钟内创建的 ID。但是我没有得到它。
下面的方法我试过了,
TIM=`date -u +"%Y-%m-%dT%H:%M:%S.000Z" -d '-15 minutes'`
jq -r --arg TIMEE "$TIM" '.[]|select((.ref|contains("dev")) and (.updated_at >= "$TIMEE"))|.id' MyJsonFile.json
但这没有按预期工作。我没有看到任何 ID。但是当条件为(.updated_at >= "$TIMEE")
时。我可以看到所有在最后一分钟内创建的 ID。
不确定我的尝试是否正确。非常感谢任何帮助。
您可以在 jq 中查看时间,但它只处理 ISO 8601 日期,没有毫秒。因此,您必须将它们切断以进行比较。 now
为您提供当前时间。
jq '.[] | select(.updated_at | "\(.[:-5])Z" | fromdate + 900 > now).id'
如果你想有分钟的参数,试试:
jq --argjson min 15 '
.[] | select(.updated_at | "\(.[:-5])Z" | fromdate + 60 * $min > now).id
'
TIM=`date -u +"%Y-%m-%dT%H:%M:%S.000Z" -d '-15 minutes'`
jq -r --arg TIMEE "$TIM" '.[]|select((.ref|contains("dev")) and (.updated_at >= $TIMEE))|.id' MyJsonFile.json
只需删除“$TIMEE”周围的引号即可。如果你引用它,它可能会被视为一个字符串。
我的 Json 文件有如下数据:
[
{
"id": 47,
"iid": 12,
"project_id": 1,
"status": "pending",
"source": "push",
"ref": "new-pipeline",
"sha": "ab23456789d",
"web_url": "https://example.com/project/pipelines/47",
"created_at": "2022-02-24T11:28:34.085Z",
"updated_at": "2016-08-24T15:32:35.169Z"
},
{
"id": 48,
"iid": 13,
"project_id": 1,
"status": "pending",
"source": "web",
"ref": "new-pipeline",
"sha": "ab23456789d",
"web_url": "https://example.com/project/pipelines/48",
"created_at": "2022-02-23T11:28:34.085Z",
"updated_at": "2016-08-23T15:32:35.169Z"
}
]
我正在尝试获取在过去 15 分钟内创建的 ID。但是我没有得到它。
下面的方法我试过了,
TIM=`date -u +"%Y-%m-%dT%H:%M:%S.000Z" -d '-15 minutes'`
jq -r --arg TIMEE "$TIM" '.[]|select((.ref|contains("dev")) and (.updated_at >= "$TIMEE"))|.id' MyJsonFile.json
但这没有按预期工作。我没有看到任何 ID。但是当条件为(.updated_at >= "$TIMEE")
时。我可以看到所有在最后一分钟内创建的 ID。
不确定我的尝试是否正确。非常感谢任何帮助。
您可以在 jq 中查看时间,但它只处理 ISO 8601 日期,没有毫秒。因此,您必须将它们切断以进行比较。 now
为您提供当前时间。
jq '.[] | select(.updated_at | "\(.[:-5])Z" | fromdate + 900 > now).id'
如果你想有分钟的参数,试试:
jq --argjson min 15 '
.[] | select(.updated_at | "\(.[:-5])Z" | fromdate + 60 * $min > now).id
'
TIM=`date -u +"%Y-%m-%dT%H:%M:%S.000Z" -d '-15 minutes'`
jq -r --arg TIMEE "$TIM" '.[]|select((.ref|contains("dev")) and (.updated_at >= $TIMEE))|.id' MyJsonFile.json
只需删除“$TIMEE”周围的引号即可。如果你引用它,它可能会被视为一个字符串。