jq tem uma função de junção exatamente para essa situação:
jq '[.major,.minor,.hotfix] | map (tostring) | join(".")'
Você pode deixar de fora o map
se os valores já forem strings.
Usando um arquivo JSON com o seguinte conteúdo:
{"major":a, "minor":b, "hotfix":c}
Estou tentando usar jq
para gerar a seguinte saída:
a.b.c
Eu usei comandos individuais de jq
, como jq .major
, e posso obter individualmente o conteúdo de que preciso, mas é muito difícil fazer tudo de uma vez e, especialmente, adicionar os pontos. para mim.
Obrigado.
Use os comandos jq
em uma série de substituições de comandos em uma atribuição de variável que codifica um período entre eles:
output="$(jq .major ...)"."$(jq .minor ...)"."$(jq .hotfix ...)"
jq -j '.major, ".", .minor, ".", .hotfix, "\n"' file
apenas no caso de alguém não entender, é o que diz a página man:
Even literals like "hello" or 42 are filters - they take an input but always produce the same literal as output.
....
, If two filters are separated by a comma, then the input will be fed into both and there will be multiple outputs: first, all of the outputs produced by the left expression, and then all of the outputs produced by the right.
Portanto, não há necessidade de complicações como | map | join
/ whatever em casos tão simples. Talvez a página man seja melhor estruturada.
E supondo que jq
não estivesse disponível, GNU awk
solution:
awk -F':|,|}' '{print $2"."$4"."$6}' file