この出力があり、それをプロメテウスに似た形式に変換したいと思います。黄金色の春。
cat /tmp/wp-plugin.txt | jq .[]
{
"name": "akismet",
"status": "active",
"update": "none",
"version": "5.0"
}
{
"name": "performance-lab",
"status": "active",
"update": "none",
"version": "1.4.0"
}
私の目標は、JQ CLIツールを使用してこの効果を得ることです。
wp_plugins{name="akismet",status="active",update="none",version="5.0"}0
wp_plugins{name="performance-lab",status="active",update="active",version="1.4.0"}1
ベストアンサー1
使用jq
:
jq -r 'to_entries[] | .key as $k | .value | to_entries | map("\(.key)=\(.value|@json)") | "wp_plugins{\(join(","))}\($k)"' file
または
jq -r 'to_entries[] | .key as $k | .value | to_entries | "wp_plugins{\(map("\(.key)=\(.value|@json)")|join(","))}\($k)"' file
これは生のJSONファイルをインポートして最初に使用しますto_entries
。キーは配列インデックスになり、値は実際のオブジェクトになります。
引用符なしのキーと引用符付きの値を使用してカンマで区切られたキーと値のリストを生成するため、=
各キーと値の間にハンドル.value
(つまりオブジェクト)が必要です。to_entries
これを再度渡して、新しいキーと値のリストを取得します。
次に、キーと値は、探している形式で出力を構成する文字列コンストラクタに渡され、カンマ区切りリストの先頭に文字wp_plugins{
列を追加し、}
最後に配列インデックスを追加します。
質問のデータの出力を提供する(データが最初に配列に入力されたとき):
wp_plugins{name="akismet",status="active",update="none",version="5.0"}0
wp_plugins{name="performance-lab",status="active",update="none",version="1.4.0"}1
0
キーでない場合は、出力行の末尾にaを使用してバリアントを修正しました。update
available
1
available
jq -r '
to_entries[] |
(if .value.update == "available" then 1 else 0 end) as $v |
.value | to_entries |
map("\(.key)=\(.value|@json)") | join(",") |
"wp_plugins{\(.)}\($v)"' file