Пока пул экспортируется во время завершения работы и используется только из одной системы за раз, то, что вы обсуждаете, не должно вызывать проблем.
ZFS очень, очень, действительно не нравится, когда один и тот же пул используется несколькими системами одновременно, даже в режиме чтения -только (-o readonly=on
, заданном для zpool import
), но это не кажется, не применимо к вашей ситуации.
Чтобы поддерживать совместимость между двумя версиями, вы должны убедиться, что не для запуска zpool upgrade
или zfs upgrade
, особенно из более новой установки. Любой из них может привести к потере доступа к пулу или файловой системе при запуске старой установки, но ни один из них не должен привести к потере пула или файловой системы при запуске системы, поддерживающей ZFS на -версии диска, обновленной до.
Когда вы закончите обновление, если хотите, вы можете обновить пул до последней версии формата диска -и функций, используя zpool upgrade
и/или zfs upgrade
по мере необходимости.
$ jq '(.quiz[] | select(has("id"))).q1 |= with_entries(select(.key == "answer").key |= "answer_id")' file.json
{
"quiz": {
"sport": {
"id": "77",
"q1": {
"question": "Which one is correct team name in NBA?",
"options": [
"New York Bulls",
"Huston Rocket"
],
"answer_id": "Huston Rocket"
}
},
"maths": {
"q1": {
"question": "5 + 7 = ?",
"options": [
"10",
"13"
],
"answer": "13"
}
}
}
}
Выражение jq
само по себе:
(.quiz[] | select(has("id"))).q1 |=
with_entries(select(.key == "answer").key |= "answer_id")
При этом используетсяjq
для поиска правильной записи .quiz
, которая имеет ключ id
.
Для этой записи он выбирает q1
значение ключа (объекта JSON ),и переименовывает ключ answer
этого объекта в answer_id
. Переименование ключа выполняется с помощью with_entries()
, который преобразует как ключи, так и значения объекта в изменяемые значения, а затем обратно. Внутри with_entries()
мы выбираем ключ, который хотим переименовать, и просто переименовываем его.
Я предпочел использовать правильный синтаксический анализатор JSON, а не пытаться использовать awk
или какой-либо другой инструмент, который не очень полезен для анализа форматов структурированных документов. Обратите внимание, что ваш пример документа мог выглядеть как
{"quiz":{"sport":{"id":"77","q1":{"question":"Which one is correct team name in NBA?","options":["New York Bulls","Huston Rocket"],"answer":"Huston Rocket"}},"maths":{"q1":{"question":"5 + 7 = ?","options":["10","13"],"answer":"13"}}}}
, который является действительным документом JSON, эквивалентным документу в вопросе. Инструмент jq
проанализировал бы их оба одинаково и дал бы одинаковый результат.