You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用txt文件内容替换jq命令参数并批量执行查询?

问题描述

我当前执行的jq命令如下:

jq '.backups[] | select(.resource_name == "resource_name") | {BackupTime: .updated_at, DiskName: .resource_name}' js.json | head -4

想实现用list.txt文件里的每一行字符串,替换命令中.resource_name的取值,针对每行内容执行一次该jq命令。list.txt内容示例:

apple
mango
grapes

期望执行的命令形式类似:

jq '.backups[] | select(.resource_name == "apple") | {BackupTime: .updated_at, DiskName: .resource_name}' js.json | head -4
解决方案

方法1:Bash循环逐行处理

通过while read循环读取list.txt的每一行,用jq的--arg参数传递变量(避免字符串拼接的转义问题),逐行执行命令:

while read -r resource; do
  jq --arg res "$resource" '.backups[] | select(.resource_name == $res) | {BackupTime: .updated_at, DiskName: .resource_name}' js.json | head -4
done < list.txt

方法2:jq一次性批量处理(高效版)

如果不想重复启动jq进程,可以把list.txt内容读入jq,一次性匹配所有目标资源,适合处理大文件或大量资源的场景:

jq --arg resources "$(cat list.txt)" '
  ($resources | split("\n") | select(length>0)) as $res_list
  | .backups[]
  | select(.resource_name | IN($res_list[]))
  | {BackupTime: .updated_at, DiskName: .resource_name}
' js.json | head -12  # 按每个资源取4行计算,3个资源对应12行

内容的提问来源于stack exchange,提问作者Harsha Vardhan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 04:20:53