Using jq https://stedolan.github.io/jq/如何将数组转换为按文件名索引的对象,或将多个文件读取到按文件名索引的一个对象中?
e.g.
jq -s 'map(select(.roles[]? | contains ("mysql")))' -C dir/file1.json dir/file2.json
这给了我想要的数据,但我需要知道它们来自哪个文件。
所以而不是
[
{ "roles": ["mysql"] },
{ "roles": ["mysql", "php"] }
]
对于输出,我想要:
{
"file1": { "roles": ["mysql"] },
"file2": { "roles": ["mysql", "php"] }
}
我确实希望也删除“.json”文件扩展名如果可能的话,以及基本名称(不包括目录)。
Example
file1.json
{ "roles": ["mysql"] }
file2.json
{ "roles": ["mysql", "php"] }
file3.json
{ }
我的真实文件显然还包含其他内容,但这对于本示例来说应该足够了。 file3 只是为了演示有时会丢失的“角色”。
换句话说:我试图在“角色”列表中查找包含“mysql”的文件。我需要将文件名和内容合并到一个 JSON 对象中。
进一步简化问题:
jq 'input_filename' f1 f2
为我提供了我想要的所有文件名,但我不知道如何将它们组合成一个对象或数组。
Whereas,
jq -s 'map(input_filename)' f1 f2
给我the same每个文件的文件名重复一次。例如[ "f1", "f1" ]
代替[ "f1", "f2" ]