使用jq处理多JSON文件时如何在输出中添加对应源文件名
jq多文件处理新增源文件名字段解决方案
你之前的写法失效的核心原因是使用cat *将所有文件内容合并为标准输入流传给jq,此时jq无法识别原始文件归属,内置变量input_filename会固定返回<stdin>,无法拿到真实文件名。
直接将目标JSON文件作为jq的输入参数即可,修改后的命令如下:
jq -r '.[] | select(.shot.type.id==88) | {id:.id, index:.index, player_id:.player.id, striker_name:.player.name, source_file: input_filename}' *.json
如果需要输出制表符分隔的纯文本行(而非JSON结构),可以使用如下写法:
jq -r '.[] | select(.shot.type.id==88) | [.id, .index, .player.id, .player.name, input_filename] | @tsv' *.json
补充说明:
- 你可以将命令中的
*.json替换为你实际需要匹配的文件范围 - 如果你处理的JSON文件顶层不是数组,可以自行调整第一层的遍历逻辑
内容的提问来源于stack exchange,提问作者salv100
相关产品推荐
相关产品推荐

