Edit # 2
Если вы собираетесь делать больше, чем просто несколько простых вещей с JobId
s и ArchiveId
s, вы можете рассмотреть возможность сделать это в Python:
import json
with open('my-json-archiving.json', 'r') as fp:
jobs = json.load(fp)['Jobs']
seen = set()
unique_by_archive_id = [job for job in jobs if job['ArchiveId'] not in seen and not seen.add(job['ArchiveId'])]
for job in unique_by_archive_id:
job_id = job['JobId']
archive_id = job['ArchiveId']
# do stuff here
Редактировать # 1
Чтобы получить JobId
и ArchiveId
в качестве переменных, вы можете сделать что-то вроде этого:
jq -r '.Jobs |= unique_by(.ArchiveId) | .Jobs[] | "\(.JobId) \(.ArchiveId)"' \
my-json-archiving.json | while IFS= read -r line; do
jobId="$(awk '{print $1}' <<< $line)"
archiveId="$(awk '{print $2}' <<< $line)"
echo "Job id: $jobId"
echo "Archive id: $archiveId"
done
Оригинальный ответ
Я не уверен на 100%, что вы здесь спрашиваете. Если вы хотите получить JobId
и ArchiveId
от каждой работы, вы можете сделать что-то вроде этого:
$ 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
Аналогичный вопрос: Использование jq для извлечения указанных c значений свойств и вывода в одну строку .
Также можно взглянуть на Справочная страница JQ (man jq
). Там много примеров.