¿Cómo puedo (simplemente) envolver esta salida en XML / JSON?
Asumiendo que no quieren etiquetas individuales para total
, used
, free
shared
etc, se puede envolver toda la producción en las etiquetas que encierran, en su caso:
XML
El siguiente script podría guardarse como (por ejemplo) memoryinfo-xml.sh
:
#!/bin/bash
# memoryinfo-xml.sh - wrap output of free + vmstat in XML tags
echo "<output>"
echo -e "\t<date>$(date)</date>"
echo -e "\t<free>$(free)</free>"
echo -e "\t<vmstat>$(vmstat)</vmstat>"
echo "</output>"
salida de ejemplo:
<output>
<date>Thu 30 Mar 16:21:18 BST 2017</date>
<free> total used free shared buffers cached
Mem: 3853532 3721596 131936 100868 227652 3024584
-/+ buffers/cache: 469360 3384172
Swap: 1182716 2512 1180204</free>
<vmstat>procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
1 0 2512 132084 227652 3024584 0 0 3 2 4 4 1 0 99 0 0</vmstat>
</output>
Como puede ver, ¡no es exactamente bonito!
JSON
Muy similar a antes, guardar como (por ejemplo) memoryinfo-json.sh
:
#! / bin / bash
# memoryinfo-json.sh - salida de ajuste de free + vmstat en json
# gracias a https://stackoverflow.com/a/1252191 por \ n reemplazo
echo "{\" salida \ ":"
echo -e "\ t {\" fecha \ ": \" $ (fecha) \ ","
echo -e "\ t \" free \ ": \" $ (free | sed ': a; N; $! ba; s / \ n / || / g') \ ","
echo -e "\ t \" vmstat \ ": \" $ (vmstat | sed ': a; N; $! ba; s / \ n / || / g') \ ""
eco "}"
salida de ejemplo:
{
"salida": {
"date": "jue 30 mar 16: 48: 51 BST 2017",
"free": "total de buffers compartidos gratuitos usados en caché || Mem: 3853532 3722428 131104 100868 227888 3024844 || - / + buffers / caché: 469696 3383836 || Swap: 1182716 2512 1180204",
"vmstat": "procs-- - - - - - memory-- - - - - - - swap-- - - - io-- - - system-- - - --cpu-- - - || rb swpd free buff cache si so bi bo in cs us sy id wa st || 1 0 2512 131096 227888 3024844 0 0 3 2 4 4 1 0 99 0 0 "
}
}
Tenga en cuenta que para obtener un JSON válido , las nuevas líneas se han reemplazado por un carácter de doble canalización ( ||
), a través del sed
reemplazo .
--out-json
parámetro. Entonces tendrá que hacer esto manualmente. Aquí hay una respuesta que debería ayudarlo en su camino para formatear la salida a Json askubuntu.com/questions/272535/…xmllint
como parte de libxml2-utils que puede ser de alguna ayuda para usted. ¿Ha considerado usar otro idioma que tenga bibliotecas para el soporte de Json / XML para hacer esto? Como perl o python