динамически изменять имена ключей с помощью перечисления - PullRequest
0 голосов
/ 07 ноября 2019

Я хочу проанализировать вывод команды ps -Ao comm,pmem --sort=-pmem | head -n 6 как JSON с использованием jq.

Мой текущий однострочный:

ps -Ao comm,pmem --sort=-pmem | head -n 6 | jq -sR '[sub("\n$";"") | splits("\n") | sub("^ +";"") | [splits(" +")]] | .[0] as $header | .[1:] | [.[] | [. as $x | range($header | length) | {"key": $header[.], "value": $x[.]}] | from_entries]'

Вывод в порядке, но ключи - это просто имена столбцов команды ps. Я хочу, чтобы у каждой записи было динамическое имя, например COMMAND_1, COMMAND_2 ...% MEM_1,% MEM_2 и т. Д.

1 Ответ

0 голосов
/ 08 ноября 2019

Решение может пронумеровать строку с nl

и использовать первый столбец 0 для вычисления имени ключа.

 ps -Ao comm,pmem --sort=-pmem | head -n 6 | nl -s' '  -v0 | \
 jq -sR '[sub("\n$";"") | splits("\n") | sub("^ +";"") | [splits(" +")]] | .[0] \
        as $header | .[1:] | [.[] | [. as $x | \
        range( 1 ; ( $header | length ) ) |  \
        {"key": ($header[.]+"_"+($x[0]|tostring)) , "value": $x[.]} ] | from_entries ]'
...