如何获取目录中各JSON文件的元素长度并关联文件名
解决方法:生成含文件名与JSON元素长度的JSON数组
方法1:find+jq组合(推荐,无循环)
直接通过管道完成所有操作,简洁可靠:
find . -maxdepth 1 -type f -name "*.json" -exec jq -n --arg fname {} '{name: ($fname | sub("^\\./"; "")), size: input | length}' {} \; | jq -s .
find只遍历当前目录下的JSON文件,避免递归子目录--arg fname {}把文件名传入jq,用sub去掉前缀./得到干净的文件名input | length读取文件内容并计算元素长度- 最后
jq -s .把所有单个JSON对象合并成数组
方法2:bash循环逐文件处理
如果偏好脚本风格,用循环逐个处理文件:
results=() for file in *.json; do size=$(jq 'length' "$file") results+=("{\"name\":\"$file\",\"size\":$size}") done echo "[${results[*]}]" | jq .
- 遍历所有
.json文件,用jq 'length'获取每个文件的元素长度 - 构造单个JSON对象存入数组,最后拼接成数组格式并格式化输出
方法3:基于你原有命令的改进版
调整你之前尝试的命令组合,实现关联匹配:
ls *.json | jq -R '{name: .}' | jq --slurpfile sizes <(jq -n '[inputs|length]' ./*.json) 'map(. + {size: $sizes[0][index(.name)]})'
- 先生成文件名数组,再把所有文件的长度读取到
sizes变量 - 通过
index(.name)匹配文件名对应的长度,合并成包含name和size的对象
内容的提问来源于stack exchange,提问作者anantha
相关产品推荐
相关产品推荐

