No.

No.

Datos de entrada.json

{
  "lastUpdateTime" : "2018-07-20T10:56:26.000Z",
  "items" : [ {
    "date" : "2018-07-19T21:09:27.000Z",
    "user" : "dddd",
    "size" : 5219402,
    "rawSize" : 15658206,
    "numFiles" : 119
  }, {
    "date" : "2018-07-19T21:09:27.000Z",
    "user" : "aaaa",
    "size" : 20524410845,
    "rawSize" : 61573215663,
    "numFiles" : 7540
  }, {
    "date" : "2018-07-19T21:09:27.000Z",
    "user" : "wwww",
    "size" : 0,
    "rawSize" : 0,
    "numFiles" : 2
  }, {
    "date" : "2018-07-19T21:09:27.000Z",
    "user" : "qqqq",
    "size" : 201084,
    "rawSize" : 603252,
    "numFiles" : 25
  }, {
    "date" : "2018-07-19T21:09:27.000Z",
    "user" : "ttttt",
    "size" : 280395332,
    "rawSize" : 288900666,
    "numFiles" : 199
  } ]
}

Rendimiento esperado

User Size
aaa   121
bbb   123

¿Cómo convertir JSON a la tabla anterior? Por favor, ayúdame.

Respuesta1

Bueno, aunque estoy completamente de acuerdo con @gronostaj en cuanto a NO usar awko sedcomo herramienta de análisis para JSON, sé que a veces puede haber casos en los que no se puede usar nada más excepto lo que viene con el sistema operativo.

Si está absolutamente seguro de que el JSON que publicó siempre estará en el mismo formato en el que publicó, la solución se encuentra a continuación:

#!/bin/sh

data='
{
  "lastUpdateTime" : "2018-07-20T10:56:26.000Z",
  "items" : [ {
    "date" : "2018-07-19T21:09:27.000Z",
    "user" : "dddd",
    "size" : 5219402,
    "rawSize" : 15658206,
    "numFiles" : 119
  }, {
    "date" : "2018-07-19T21:09:27.000Z",
    "user" : "aaaa",
    "size" : 20524410845,
    "rawSize" : 61573215663,
    "numFiles" : 7540
  }, {
    "date" : "2018-07-19T21:09:27.000Z",
    "user" : "wwww",
    "size" : 0,
    "rawSize" : 0,
    "numFiles" : 2
  }, {
    "date" : "2018-07-19T21:09:27.000Z",
    "user" : "qqqq",
    "size" : 201084,
    "rawSize" : 603252,
    "numFiles" : 25
  }, {
    "date" : "2018-07-19T21:09:27.000Z",
    "user" : "ttttt",
    "size" : 280395332,
    "rawSize" : 288900666,
    "numFiles" : 199
  } ]
}
'
###########################################################
echo "${data}" | awk -F: 'BEGIN{
  printf ("%s\t\t%s\t%s\n","Date", "User", "Size")
}
/lastUpdateTime/ {next}
/date/ { gsub(/\"|,|\s/,""); gsub(/T.+$/,""); printf ("%s\t", $2) }
/user/ { gsub(/\"|,|\s/,""); printf ("%s\t", $2) }
/size/ { gsub(/\"|,|\s/,""); printf ("%s\n", $2) }
'

Respuesta2

La única respuesta honestamente correcta es:

No.

awky sedno son herramientas adecuadas para el trabajo. No podrá manejar adecuadamente el escape y la codificación JSON. Podría intentar cubrir algunos casos básicos, pero también podría utilizar una herramienta adecuada:jq.

jqsolución

jq '.items[] | "\(.user) \(.size)"' -r /path/to/file

(como alternativa, puede canalizar JSON en el comando en lugar de leerlo desde el archivo)

Para alinear columnas:

jq '.items[] | "\(.user) \(.size)"' -r /path/to/file | column -t

información relacionada