openweathermap json в csv

Команда tput использует terminfo (из man tput ):

tput [-Ttype] capname [parms ...]

(…)

Полный список возможностей и capname , связанных с каждой из них, см. В terminfo (5).

(…)

capname
указывает возможность из базы данных terminfo. Когда поддержка termcap вкомпилирована, также принимается имя termcap для возможности.

civis и cnorm описаны на странице руководства terminfo :

   cursor_invisible              civis      vi        make cursor invisi‐
                                                      ble
   cursor_normal                 cnorm      ve        make cursor appear
                                                      normal (undo
                                                      civis/cvvis)

В общем, если вы не знаете, какой man-страница описывает конкретную команду, вы можете искать ее. В этом случае я обнаружил это, запустив man -K civis .

3
18.11.2018, 11:30
2 ответа

Las expresiones regulares y sedno son una gran combinación para este tipo de tarea, pero es bastante simple usando jq, una herramienta de procesamiento 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

jqtoma un flujo de datos JSON y lo filtra para extraer los datos que desea,de manera análoga a sedpero para datos estructurados en lugar de texto. Este comando toma cada elemento de la matriz "lista"(.list[])y extrae el campo "dt"(.dt)de el objeto dentro de junto con todo en el objeto "principal" también (.main[]), poniendo todo el lote en una matriz y convirtiéndolo en una fila CSV(@csv).


Si está interesado en campos particulares, o desea reordenarlos, también puede enumerarlos:

$ jq -r '.list[]|[.dt,.main.temp_min,.main.humidity] | @csv' < data.json
1519333200,271.62,88
1519344000,271.22,100

Simplemente enumere cada uno que le interese e ignore el resto.


Si desea acceder a otras partes de los datos, también puede poner eso allí:.cloudsbuscará en el campo clouds, o puede leer la velocidad del viento con.wind.speed-siempre un punto antes del nombre, como si estuvieras escribiendo JavaScript. El jqmanual es bastante completo para cualquier comportamiento personalizado que necesite.

6
27.01.2020, 21:13

Просто быстрое дополнение к отличному ответу Майкла Гомера:

Если выражение jq становится большим, мы можем сделать с ним скрипт:

Пример:

$ cat mkweatherreport
#!/usr/bin/jq -rf
.list[] |
  [
    .dt,
    .main.temp_min,        # in Kelvin degrees
    .main.humidity
  ] | @csv

, а затем:

$ mkweatherreport f.json
1519333200,271.62,88
1519344000,271.22,100
1
27.01.2020, 21:13

Теги

Похожие вопросы