У меня есть файл в подмножестве YAML с данными, подобными приведенным ниже:
# This is a comment
# This is another comment
spark:spark.ui.enabled: 'false'
spark:spark.sql.adaptive.enabled: 'true'
yarn:yarn.nodemanager.log.retain-seconds: '259200'
Мне нужно преобразовать это в документ JSON, похожий на этот (обратите внимание, что строки, содержащие логические и целые числа, все еще остаютсяstrings):
{
"spark:spark.ui.enabled": "false",
"spark:spark.sql.adaptive.enabled": "true",
"yarn:yarn.nodemanager.log.retain-seconds", "259200"
}
Самое близкое, что я получил, было это:
cat << EOF > ./file.yaml
> # This is a comment
> # This is another comment
>
>
> spark:spark.ui.enabled: 'false'
> spark:spark.sql.adaptive.enabled: 'true'
> yarn:yarn.nodemanager.log.retain-seconds: '259200'
> EOF
echo {$(cat file.yaml | grep -o '^[^#]*' | sed '/^$/d' | awk -F": " '{sub($1, "\"&\""); print}' | paste -sd "," - )}
, который, кроме довольно грубого взгляда, не дает правильного ответа, он возвращает:
{"spark:spark.ui.enabled": 'false',"spark:spark.sql.adaptive.enabled": 'true',"dataproc:dataproc.monitoring.stackdriver.enable": 'true',"spark:spark.submit.deployMode": 'cluster'}
, который, если я передаю трубку на jq
, вызывает ошибку разбора.
Я надеюсь, что мне не хватает гораздо более простого способа сделать это, но я не могу понять это.Кто-нибудь может помочь?