Expressões regulares e sed
não combinam muito com esse tipo de tarefa, mas é bastante simples usar jq
, uma ferramenta de processamento JSON:
$ jq -r '.list[]|[.dt, .main[]] | @csv' < data.json
1519333200,271.62,271.62,272.921,1028.3,1037.2,1028.3,88,-1.3
1519344000,271.22,271.22,272.193,1028.11,1037.04,1028.11,100,-0.98
jq
recebe um fluxo de dados JSON e filtra-o para extrair os dados desejados, de forma análoga a sed
, mas para dados estruturados, em vez de texto. Este comando toma cada elemento da matriz "list" ( .list[]
) e arranca o campo "dt" ( .dt
) de o objeto dentro junto com tudo no objeto "principal" também ( .main[]
) , colocando todo o lote em uma matriz e convertendo isso para uma linha CSV ( @csv
) .
Se você estiver interessado em campos específicos ou quiser reorganizá-los, também poderá listá-los:
$ jq -r '.list[]|[.dt, .main.temp_min, .main.humidity] | @csv' < data.json
1519333200,271.62,88
1519344000,271.22,100
Basta listar cada um com quem você se importa e ignorar o resto.
Se você quiser entrar em outras partes dos dados, você pode colocar isso lá também: .clouds
irá olhar para o campo clouds
, ou você pode ler a velocidade do vento com .wind.speed
- sempre um ponto antes do nome, como se você estivesse escrevendo JavaScript. O manual jq
é bastante abrangente para qualquer comportamento personalizado que você precise.