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
в конце дает нам окончательный результат.
Не уверен, что понял, но попробуй...
ваша команда _| тройник -лог-файл
это запустит вашу команду и добавит ее в файл с именем "logfile", затем вы можете просмотреть лог-файл, сделать против него wc -l и т. д.