加入 jq 数组,用于 CSV 输出
joining jq arrays, for CSV output
我正在寻找基于两个 json 数组的 CSV(数组是具有键值对的大型 jason 数组的缩减)
[
"Name",
"Role",
"Type",
"Service",
"Group",
]
[
"some-server.com",
"web server",
"production",
"apps",
"main",
]
我可以通过以下方式得到更少的东西:
jq -r '[.Tags[].Key], [.Tags[].Value] | join (",")' output.json
问题是,键并不总是按相同的顺序排序。对于某些对象,我得到:
Name, Role, Type
其他时间:
Role, Type Name ..
我正在寻找一种使输出一致的方法。
您可以使用以下方法规范化对象:
def sortKeys: to_entries | sort | from_entries
例如,如果 A 是非规范化对象的数组,您可以这样写:
A | map(sortKeys)
或者对象可以在创建后立即规范化。
对于 CSV,您可能希望根据预先确定的键名数组来确定顺序。在这种情况下,您可以使用:
def selectKeys(keys):
. as $in | reduce keys[] as $k ({}; . + {($k): $in[$k]})
我正在寻找基于两个 json 数组的 CSV(数组是具有键值对的大型 jason 数组的缩减)
[
"Name",
"Role",
"Type",
"Service",
"Group",
]
[
"some-server.com",
"web server",
"production",
"apps",
"main",
]
我可以通过以下方式得到更少的东西:
jq -r '[.Tags[].Key], [.Tags[].Value] | join (",")' output.json
问题是,键并不总是按相同的顺序排序。对于某些对象,我得到:
Name, Role, Type
其他时间:
Role, Type Name ..
我正在寻找一种使输出一致的方法。
您可以使用以下方法规范化对象:
def sortKeys: to_entries | sort | from_entries
例如,如果 A 是非规范化对象的数组,您可以这样写:
A | map(sortKeys)
或者对象可以在创建后立即规范化。
对于 CSV,您可能希望根据预先确定的键名数组来确定顺序。在这种情况下,您可以使用:
def selectKeys(keys):
. as $in | reduce keys[] as $k ({}; . + {($k): $in[$k]})