这是我的输入:
{
"alias-name": "soufriere",
"member-entry": {
"alias-entry-name": [
"21:00:f4:e9:d4:50:56:7e",
"21:00:f4:e9:d4:50:56:7f"
]
}
}
{
"alias-name": "stromboli",
"member-entry": {
"alias-entry-name": [
"21:00:f4:e9:d4:50:56:8e"
"21:00:f4:e9:d4:50:56:9e"
]
}
}
我想把它变成输出
alicreate "soufriere","21:00:f4:e9:d4:50:56:7e;21:00:f4:e9:d4:50:56:7f"
alicreate "stromboli","21:00:f4:e9:d4:50:56:8e;21:00:f4:e9:d4:50:56:9e"
我试过这个:
jq -r --arg quote "\"" ("alicreate " + $quote + ."alias-name" + $quote + "," + $quote + ."member-entry"."alias-entry-name"[] + $quote)'
但它给出的是一行一行而不是顺序的。
alicreate "soufriere","21:00:f4:e9:d4:50:56:7e"
alicreate "soufriere","21:00:f4:e9:d4:50:56:7f"
alicreate "stromboli","21:00:f4:e9:d4:50:56:8e"
alicreate "stromboli","21:00:f4:e9:d4:50:56:9e"
join
过滤器。此外,在字符串内部,您可以使用 \"
生成引号,并使用 字符串插值 \(…)
来注入值。
jq -r '"alicreate \"\(."alias-name")\",\"\(
."member-entry"."alias-entry-name" | join(";")
)\""'
alicreate "soufriere","21:00:f4:e9:d4:50:56:7e;21:00:f4:e9:d4:50:56:7f"
alicreate "stromboli","21:00:f4:e9:d4:50:56:8e;21:00:f4:e9:d4:50:56:9e"
请注意,您可能希望正确转义这些值,而不仅仅是用双引号将它们括起来,但使用哪种编码很大程度上取决于输出的用例。
我们可以使用
@csv
过滤器来为我们处理引用:
jq -r '
[."alias-name", (."member-entry"."alias-entry-name" | join(";"))]
| @csv
| "alicreate " + .
'
alicreate "soufriere","21:00:f4:e9:d4:50:56:7e;21:00:f4:e9:d4:50:56:7f"
alicreate "stromboli","21:00:f4:e9:d4:50:56:8e;21:00:f4:e9:d4:50:56:9e"