cli和jq,在用unique_by过滤后如何获得属性值

问题描述 投票:1回答:1

我有以下JSON数据:

{
  "Jobs":[
     {"JobId": 111, "ArchiveId": 333},
     {"JobId": 112, "ArchiveId": 333},
     {"JobId": 113, "ArchiveId": 2323},
     {"JobId": 114, "ArchiveId": 444}
  ]
}

这是查看JSON对象的shell脚本:

count_again=0
jq -r '.Jobs |= unique_by(.ArchiveId)' my-json-archiving.json  \
   | while IFS= read -r job; do
   count_again=$(($count_again + 1))
   echo $job
   echo $count_again
done

我的第一步是通过某个键(.ArchiveId)过滤所有重复项。完成后,我要遍历结果。下面是我所拥有的,主要的问题是它实际上是逐行读取的。我认为这与我返回的$job有关。

我对shell脚本非常陌生,因此我不确定如何在读取对象时返回其循环通过的对象

bash shell command-line-interface jq
1个回答
0
投票

我不确定您在这里问什么100%。如果您只想从每个作业中获取JobIdArchiveId,则可以执行以下操作:

$ jq -r '.Jobs |= unique_by(.ArchiveId) | .Jobs[] | "\(.JobId) \(.ArchiveId)"' \
 my-json-archiving.json
111 333
114 444
113 2323

这样的文本在awk中效果很好。例如:

$ jq -r '.Jobs |= unique_by(.ArchiveId) | .Jobs[] | "\(.JobId) \(.ArchiveId)"' \
 my-json-archiving.json | awk '{print "JobId:", $1, "ArchiveId:", $2}'
JobId: 111 ArchiveId: 333
JobId: 114 ArchiveId: 444
JobId: 113 ArchiveId: 2323

类似的问题:Using jq to extract specific property values and output on a single line

也可以看一下jq的联机帮助页(man jq)。那里有很多例子。

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.