我有一个正在输出的IPv4地址列表,每个地址都用分隔符隔开。要将这些地址导入到的程序要求它采用以下格式:
{
"data":[
{ "IP":"127.0.0.1" },
{ "IP":"192.168.0.1" }
]
}
上面的输入数据应该是:
127.0.0.1
192.168.0.1
我在jq cookbook中寻找了一些想法,但我能把它们串在一起的最接近的方法是使用[]而不是{},而不是内部数据,并且只有不带键的值。
jq -sR '[sub("\n$";"") | splits("\n") | sub("^ +";"") | [splits(" +")]]'
输出:
[
[
"127.0.0.1"
],
[
"192.168.0.1"
]
]
最佳答案
下面是一个解决方案:
jq -Rn '{data: [ {IP: inputs} ] }' input.txt
如果这看起来有点神奇,你可能会使用更普通的变体:
jq -Rn '{data: [ inputs | {IP: .} ] }' input.txt
当然,在实践中,您可能还希望删除输入中的无关空白、筛选出注释、执行有效性检查或筛选出无效输入。。。