#json #bash #jq
#json #bash #jq
Вопрос:
У меня есть огромный файл json, ключи которого начинаются с «/». Я хотел создать несколько файлов json на основе имени ключа.
/upgrade-coordinator/api/v1/upgrade/eula/acceptance
/upgrade-coordinator/api/v1/upgrade/history
/upgrade-coordinator/api/v1/upgrade/nodes
/upgrade-coordinator/api/v1/upgrade/nodes-summary
/upgrade-coordinator/api/v1/upgrade/status-summary
/upgrade-coordinator/api/v1/upgrade/summary
/upgrade-coordinator/api/v1/upgrade/upgrade-unit-groups
/upgrade-coordinator/api/v1/upgrade/upgrade-unit-groups-status
Следуя некоторой заметке на сайте, я наткнулся:
for f in `cat input.json | jq -r 'keys[]'` ; do
cat input.json | jq ".$f" > $f.json
done
or when you insist on more bashy syntax like some seem to prefer:
for f in $(jq -r 'keys[]') ; do
jq ".["$f"]" < input.json > "$f.json"
done < input.json
Когда я попробовал выше, я получаю сообщение об ошибке:
-bash: -/nsxapi/api/v1/vpn/l2vpn/sessions/summary.json: No such file or directory
-bash: -/upgrade-coordinator/api/v1/upgrade/eula/acceptance.json: No such file or directory
-bash: -/upgrade-coordinator/api/v1/upgrade/history.json: No such file or directory
-bash: -/upgrade-coordinator/api/v1/upgrade/nodes.json: No such file or directory
-bash: -/upgrade-coordinator/api/v1/upgrade/nodes-summary.json: No such file or directory
-bash: -/upgrade-coordinator/api/v1/upgrade/status-summary.json: No such file or directory
-bash: -/upgrade-coordinator/api/v1/upgrade/summary.json: No such file or directory
-bash: -/upgrade-coordinator/api/v1/upgrade/upgrade-unit-groups.json: No such file or directory
-bash: -/upgrade-coordinator/api/v1/upgrade/upgrade-unit-groups-status.json: No such file or directory
-bash: -/upgrade-coordinator/api/v1/upgrade/upgrade-unit-groups/aggregate-info.json: No such file or directory
-bash: -/upgrade-coordinator/api/v1/upgrade/upgrade-units.json: No such file or directory
-bash: -/upgrade-coordinator/api/v1/upgrade/upgrade-units-stats.json: No such file or directory
-bash: -/upgrade-coordinator/api/v1/upgrade/upgrade-units/aggregate-info.json: No such file or directory
Я думаю, что это, вероятно, bcos, он хочет создать aggregate-info.json в path -/upgrade-coordinator / api / v1 /upgrade /upgrade-units / — Если это правильно, как мне заменить первую строку «/» в каждом ключе на пробел? Могу ли я получить некоторую помощь, пожалуйста?
Комментарии:
1. Поскольку входной файл огромен, было бы лучше использовать
keys_unsorted
.2. Итак, не могли бы вы, пожалуйста, помочь, как заменить символ «/» в ключе «/upgrade-coordinator / api / v1/upgrade/upgrade-units/aggregate-info» на «_upgrade-coordinator_api_v1_upgrade_upgrade-units /aggregate-info» или просто взять последнюю часть ключа (т.Е. aggregate-info в качестве имени файла?
3. Если вы хотите создать подкаталоги, используйте
mkdir -p
; если вы хотите заменить ‘/’ на ‘_’, добавьте фильтр jq:gsub("/"; "_")
Ответ №1:
Это означает — возьмем в качестве примера первое сообщение об ошибке -, что каталог -/nsxapi/api/v1/vpn/l2vpn/sessions
не существует. Вы могли бы проверить это, выполнив
ls -d -- -/nsxapi/api/v1/vpn/l2vpn/sessions
в рабочем каталоге, где выполняется ваш скрипт.
Обратите внимание, что перенаправление на некоторый путь автоматически не создает прерывистые каталоги.