jq e awk para extração do arquivo de versão

0

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.

    
por t988GF 09.10.2018 / 20:57

4 respostas

5

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.

    
por 09.10.2018 / 21:13
1

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 ...)"
    
por 09.10.2018 / 21:02
1
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.

    
por 09.10.2018 / 21:15
0

E supondo que jq não estivesse disponível, GNU awk solution:

awk -F':|,|}' '{print $2"."$4"."$6}' file
    
por 09.10.2018 / 23:15

Tags