Usando o Perl e o módulo JSON:
perl -MJSON -e 'print join("\n", @{decode_json(join("\n",<>))->{"SliceTiming"}})' <file.json
Isso gera cada número em uma linha separada sem vírgulas
Eu tenho um arquivo .json que preciso extrair o campo SliceTiming de um arquivo txt separado. Eu não posso usar jq. Se eu pudesse, meu comando seria
jq .SliceTiming [] * .json
Aqui está o arquivo .json
{
"EchoTime": 0.033,
"RepetitionTime": 0.75,
"EffectiveEchoSpacing": 0.0005,
"SliceTiming": [
0.51,
0,
0.365,
0.0725,
0.4375,
0.2175,
0.5825,
0.2925,
0.6575,
0.145,
0.51,
0,
0.365,
0.0725,
0.4375,
0.2175,
0.5825,
0.2925,
0.6575,
0.145,
0.51,
0,
0.365,
0.0725,
0.4375,
0.2175,
0.5825,
0.2925,
0.6575,
0.145,
0.51,
0,
0.365,
0.0725,
0.4375,
0.2175,
0.5825,
0.2925,
0.6575,
0.145,
0.51,
0,
0.365,
0.0725,
0.4375,
0.2175,
0.5825,
0.2925,
0.6575,
0.145,
0.51,
0,
0.365,
0.0725,
0.4375,
0.2175,
0.5825,
0.2925,
0.6575,
0.145 ],
"PhaseEncodingDirection": "j-"}
Usando o Perl e o módulo JSON:
perl -MJSON -e 'print join("\n", @{decode_json(join("\n",<>))->{"SliceTiming"}})' <file.json
Isso gera cada número em uma linha separada sem vírgulas
Ver como o python é permitido. Essa seria minha solução preferida.
Não me sinto à vontade para lidar com sed, grep, awk, pois não sei casos de borda sobre os dados.
cat data.json | python -c "import sys, json; print json.load(sys.stdin)['SliceTiming']"
Nota: Este exemplo usa python2.7, improvável que funcione com python3.x
[]
no ,
: Criado slice_out.py
porque não consegui encontrar uma boa maneira de fazer um terminal in-line
import sys, json
slice_data = json.load(sys.stdin)['SliceTiming']
for s in slice_data: print s
Ran com cat data.json | python slice_out.py