У меня есть поток элементов object_count.json
, похожий на:
{
"name":"apple",
"count":10
}
{
"name":"potato",
"count":18
}
{
"name":"stone",
"count:7
}
Отдельно от потока, у меня есть два файла, каждый из которых перечисляет имена объектов своего класса:
cat fruits.txt
apple
peach
cat vegetables.txt
potato
tomato
Как создать поток, в котором каждому объекту из object_count.json
присваивается имя соответствующего класса? I.e.:
{
"name":"apple",
"count":10
"class":"fruit"
}
{
"name":"potato",
"count":18
"class":"vegetable"
}
{
"name":"stone",
"count":7
"class":"other"
}
Мы можем предположить, что в названии объекта есть только одна запись в object_count.json
.
Я бы предпочел решение, которое:
- хорошо работает 3, 4 и более классов - каждый по-прежнему указан в отдельном файле; все в порядке, если каждый класс жестко закодирован
object_count.json
считается входным потоком, тогда как {fruits|vegetables}.txt
предоставляется каждый как отдельный --rawfile
аргумент
Версия, сообщенная JQ:
$ jq --version
jq-1.6
Мне удалось передать файл класса в качестве аргумента командной строки, но мне не удалось найти правильное выражение join
/ in
, которое сработает и решит проблему:
cat object_count.json | jq -n --rawfile fruits "fruits.txt" '($fruits | split("\n") | map(select(. != "")) | sort) as $frts | inputs'