tenho um arquivo assim
{"100":["0.00001","10","0.01"],
"101":["0.0001","100","0.1"],
"102":["1","1000","1"],
....
"103":["0.01","10000","10"]}
Eu quero trocar o segundo número com o terceiro, dentro de cada array, convertendo-o em
{"100":["0.00001","0.01","10"],
"101":["0.0001","0.1","100"],
"102":["1","1","1000"],
....
"103":["0.01","10","10000"]}
Como faço isso com sed
, awk
, ou qualquer outra coisa?
Observe a existência de {
e }
no primeiro e último registros.
obrigado
Eu aconselharia evitar analisar dados JSON usando ferramentas orientadas a texto como
awk
oused
, etc ...Em vez disso, use um analisador JSON ou uma linguagem que dependa de uma biblioteca JSON como
perl
,python
, etc.Aqui está um exemplo com
jq
:Todos os objetos são substituídos pela permutação do 3º e 2º elemento da matriz. Observe que os arrays em
jq
começam com index0
.Mais detalhado que jq seria usar uma linguagem de script que tenha bibliotecas JSON disponíveis:
Usando
jq
e suareverse
função:ou
A expressão
.[][1:]
seleciona fatias contendo todos, exceto o primeiro elemento de cada matriz no documento (.[][-2:]
seleciona explicitamente os dois últimos elementos em cada matriz). Estes são revertidos usandoreverse
.Uma abordagem possivelmente mais simples:
Reescrevendo explicitamente os arrays na ordem em que queremos, escolhendo os elementos na ordem correta:
Isso recria cada array, usando os elementos do array original na ordem em que são escolhidos.