尝试将数量不确定的JSON文件合并为一个,每个文件都使用自己的密钥表示(使用jq
)。
示例:
$ cat foo.json
{
"test1":"Foo"
}
$ cat bar.json
{
"test2":"Bar"
}
$ jq -s "{`ls | sed -r 's/\.json$/: \./' | tr '\n' ', ' | sed 's/.$//'`}" `ls`
{
"foo": [
{
"test1": "Foo"
},
{
"test2": "Bar"
}
],
"bar": [
{
"test1": "Foo"
},
{
"test2": "Bar"
}
]
}
我正在尝试输出:
{
"foo": {
"test1": "Foo"
},
"bar": {
"test2": "Bar"
}
}
例如:foo
是第一个文件的名称,并且应该是最终输出中其内容的键。
(此外,我觉得对同一件事两次叫ls
并不是很漂亮,但不确定是否有办法解决这个问题。)
答案 0 :(得分:1)
大致基于peak's answer,将输入与-n
一起使用即可一次读取JSON内容,并从文件名中删除扩展名
jq -n '
[inputs
| {(input_filename | gsub(".*/|\\.json$";"")): .}]
| add' *.json
也如原始作者所建议的那样,上述解决方案仅删除UNIX样式的路径,而不删除Windows样式的路径。