Указанную проблему можно разбить на две части:
1) синтаксический анализ текста пар key : value
в допустимый JSON;
2) построение вывода
Так как формат текста ключ: значение четко не указан, я предполагаю, что каждая пара ключ: значение находится на отдельной строке, и что пара ключ / значение может быть восстановлена с использованием def:
def parse:
capture("\"(?<k>[^\"]*)\" *: *(?<v>.*)") | [.k, (.v | fromjson)];
Вторая часть проблемы легко решается с помощью следующего общего определения:
def add_by(s; f; g):
reduce s as $x (null; .[$x|f] += ($x|g));
Соединяя части, мы можем написать:
add_by(inputs | parse; .[0]; .[1])
Вызов
Используя приведенные выше фрагменты в файле merge.jq, мы можем написать:
jq -nR -f merge.jq part1.txt part2.txt part3.txt ...
Variant
Если ваша библиотека jq уже содержит:
def aggregate_by(s; f; g):
reduce s as $x (null; .[$x|f] += [$x|g]);
тогда вы можете использовать приведенное выше значение parse
следующим образом:
aggregate_by(inputs | parse; .[0]; .[1])
| map_values(add)