[英]Get json values using awk or jq
我的 json 文件看起来像这样。
我有超过 5000 个文件:文件名: xxxx.json
示例文件1000.json
[
{
"gender": {
"value": "Female"
},
"age": 38.58685,
"age_group": "adult"
},
{
"gender": {
"value": "Male"
},
"age": 26.64953,
"age_group": "adult"
}
]
示例文件2000.json
[
{
"gender": {
"value": "Male"
},
"age": 63.8272,
"age_group": "adult"
},
{
"gender": {
"value": "Male"
},
"age": 11.8287,
"age_group": "child"
}
]
所需 Output 在一个文件中output.txt
1000 & Female,Male & 38,26 & adult,adult
2000 & Male,Male & 63,11 & adult,child
在jq
中可以通过一些字符串插值来实现:
$ find . -name "*.json" -exec jq -r \
'(input_filename | gsub("^\\./|\\.json$";"")) as $fname |
(map(.gender.value) | unique | join(",")) as $genders |
(map(.age|floor|tostring) | join(",")) as $ages |
(map(.age_group) | unique | join(",")) as $age_groups |
"\($fname) & \($genders) & \($ages) & \($age_groups)"' '{}' +
1000 & Female,Male & 38,26 & adult
2000 & Male & 63,11 & adult,child
input_filename
命令返回显而易见的结果,而对于其他部分,只需从.
作为数组并将它们加入 CSV 字符串(使用join
而不是@csv
以避免添加引号)。
find
内容是为了避免jq -r '...' *.json
命令行太长的可能性,因为您说您有超过 5000 个文件。 它可能会运行jq
多次,每次使用尽可能多的文件名(尾随+
而不是;
使得-exec
工作起来很像xargs
),而不是每个文件运行一次,以提高效率。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.