从 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”周围的引号即可。如果你引用它,它可能会被视为一个字符串。