首页 > 解决方案 > 使用枚举动态更改键名

问题描述

我想ps -Ao comm,pmem --sort=-pmem | head -n 6使用 jq 将命令的输出解析为 JSON。

我目前的单线是

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 等

标签: keyjq

解决方案


一个解决方案可以用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 ]'

推荐阅读