Как преобразовать xml ответа curl в обычный/csv/xls для общего подсчета

du -shm /var/vmail/mailboxes/domain/*/mail | awk -F '[ /]' '{ print $1, $7 }'

При вводе из duв указанном вами формате это будет производить

80 USER1
150 USER2
220 USER3

Программа awkпросто выбирает соответствующие поля из вывода du. Он интерпретирует каждую строку как поля, разделенные пробелами или косой чертой.

awk -F '[ /]' '{ print $1, $(NF - 1) }'также будет работать.

Чтобы передать это в JSON, используйтеjq:

du -shm /var/vmail/mailboxes/domain/*/mail |
awk -F '[ /]' '{ print $1, $7 }' |
jq -sR 'split("\n")[0:-1] | map(split(" ")) | map({(.[1]):.[0]}) | add'

Это даст

{
  "USER1": "80",
  "USER2": "150",
  "USER3": "220"
}

Выражение jqсначала разбивает ввод на отдельные элементы массива (по одному на строку ввода ), а затем снова разбивает их по пробелам на подмассивы. На данный момент имеем

[
  [
    "80",
    "USER1"
  ],
  [
    "150",
    "USER2"
  ],
  [
    "220",
    "USER3"
  ]
]

После этого создаются объекты со вторым элементом в каждом подмассиве в качестве ключа и первым в качестве значения:

[
  {
    "USER1": "80"
  },
  {
    "USER2": "150"
  },
  {
    "USER3": "220"
  }
]

addв конце дает нам окончательный результат.

0
03.05.2020, 18:57
1 ответ

Не уверен, что понял, но попробуй...

ваша команда _| тройник -лог-файл

это запустит вашу команду и добавит ее в файл с именем "logfile", затем вы можете просмотреть лог-файл, сделать против него wc -l и т. д.

0
28.04.2021, 23:16

Теги

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