du -shm /var/vmail/mailboxes/domain/*/mail | awk -F '[ /]' '{ print $1, $7 }'
Com a entrada de du
no formato que você fornece, isso produziria
80 USER1
150 USER2
220 USER3
O programa awk
simplesmente seleciona os campos apropriados da saída de du
. Ele interpreta cada linha como campos delimitados por espaços ou barras.
awk -F '[ /]' '{ print $1, $(NF - 1) }'
também funcionaria.
Para colocar isso em JSON, use 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'
Isso produziria
{
"USER1": "80",
"USER2": "150",
"USER3": "220"
}
A expressão jq
primeiro divide a entrada em elementos de matriz separados (um por linha de entrada) e, em seguida, os divide novamente em espaços em submatrizes. Neste ponto, temos
[
[
"80",
"USER1"
],
[
"150",
"USER2"
],
[
"220",
"USER3"
]
]
Depois disso, os objetos são criados com o segundo elemento em cada subarray como a chave e o primeiro como o valor:
[
{
"USER1": "80"
},
{
"USER2": "150"
},
{
"USER3": "220"
}
]
O add
no final nos dá o resultado final.