У меня есть каталог с кучей «логинов» json таких файлов:
[
{
"user_id": "5ce722b803b54f03f745cdf45d579920",
"time": "2019-10-29T20:03:18.894006Z"
},
{
"user_id": "5ce722b858f3e80e6e85aad3113a1665",
"time": "2019-10-29T20:11:32.4843Z"
}
]
В другом каталоге у меня есть куча «пользователей» json файлов вроде этого:
[
{
"id": "5ce722b803b54f03f745cdf45d579920",
"email": "foo@gmail.com",
"first_name": "John",
"last_name": "Doe",
"enabled": true,
"created_at": "2019-06-13T17:07:17.2925Z",
"updated_at": "2019-06-13T17:15:20.903085Z",
"groups": {
"count": 1,
"shortlist": [
{
"id": "5d0282c5d5d6063286140e864a0c6506",
"name": "cool users",
"description": "cool users",
"locked": true
}
]
},
"avatar": "",
"role_id": "5d0282c488bba9ebc62df8b3c38571a9",
"company_uid": ""
},
{
"id": "5d0284fdec62d47039e7119013b0aa2c",
"email": "bar@gmail.com",
"first_name": "Jane",
"last_name": "Doe",
"enabled": true,
"created_at": "2019-06-13T17:16:45.210018Z",
"updated_at": "2019-06-13T17:16:45.210018Z",
"groups": {
"count": 1,
"shortlist": [
{
"id": "5d0282c5d5d6063286140e864a0c6506",
"name": "cool users",
"description": "cool users",
"locked": true
}
]
},
"avatar": "",
"role_id": "5d0282c488bba9ebc62df8b3c38571a9",
"company_uid": ""
}
]
Что я пытаюсь сделать с помощью jq:
- Для каждого
user_id
в файлах "Logins" я хочу найти соответствующий id
в Файлы «Users». - Я хочу объединить эти два объекта.
Предполагаемый результат - другой файл json, который содержит логин и соответствующие данные пользователя. В качестве бонуса, я хочу только имя и фамилию электронной почты от «Пользователи».
Конечный результат будет примерно таким:
[
{
"user_id": "5ce722b803b54f03f745cdf45d579920",
"time": "2019-10-29T20:03:18.894006Z",
"email": "foo@gmail.com",
"first_name": "John",
"last_name": "Doe"
}
}
Я пробовал варианты ниже, но в итоге получится бесконечное l oop или что-то в этом роде. Я знаю, что мои циклы for неправильны, но я не знаю, как работать с несколькими файлами, подобными этим.
lastlogins="/last10/*.json"
users="/users/*.json"
for ll in $lastlogins; do
for user in $users; do
userid=$(jq -r '.[].user_id' $ll)
jq -c --arg userid "$userid" '.[] | select(.id == $userid)' $user
done
done