1

Мне это нужно каждые 2 минуты:

команда

Я использую Debian (только текстовый режим).

1 ответ1

4

Как я могу (просто) обернуть этот вывод в XML/JSON?

Предполагая, что вам не нужны отдельные теги для total , used , free shared доступа и т.д., Вы можете обернуть весь вывод в соответствующие теги:

XML

Следующий скрипт может быть сохранен как (например) 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>" 

пример вывода:

<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>

Как видите, это не совсем красиво!

JSON

Очень похоже на ранее, сохраните как (например) memoryinfo-json.sh:

#!/bin/bash
# memoryinfo-json.sh - wrap output of free + vmstat in json
# thanks to https://stackoverflow.com/a/1252191 for \n replacement
echo "{ \"output\":"
  echo -e "\t { \"date\":  \"$(date)\", "
  echo -e "\t  \"free\":   \"$(free | sed ':a;N;$!ba;s/\n/||/g')\", "
  echo -e "\t  \"vmstat\": \"$(vmstat| sed ':a;N;$!ba;s/\n/||/g')\" "
echo "}"

пример вывода:

{
    "output": {
        "date": "Thu 30 Mar 16: 48: 51 BST 2017",
        "free": "total used free shared buffers cached || Mem: 3853532 3722428 131104 100868 227888 3024844 || -/+ buffers/cache: 469696 3383836 || Swap: 1182716 2512 1180204",
        "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 131096 227888 3024844 0 0 3 2 4 4 1 0 99 0 0"
    }
}

Обратите внимание, что для получения действительного JSON символы новой строки были заменены символом двойной трубы (||) посредством замены sed.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .