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

在Bash中使用jq关联ID与titleId合并JSON文件

合并两个JSON文件并关联ID的Bash脚本问题

现有脚本与生成文件

当前使用的Bash脚本如下:

script_directory="/home/joey/scripts/scripts/delete"
region_file="US.en.json"
cnmts_file="cnmts.json"

wget https://github.com/blawar/titledb/raw/master/$region_file -O $script_directory/$region_file
wget https://github.com/blawar/titledb/raw/master/$cnmts_file -O $script_directory/$cnmts_file

# 简化JSON文件
cat $script_directory/$region_file | jq '.[] | {id: .id}' > $script_directory/region_file_id.txt
cat $script_directory/$cnmts_file | jq '.[] | .[] | {titleId: .titleId, otherApplicationId: .otherApplicationId}' > $script_directory/cnmts_titleId_otherApplicationId.txt

执行脚本后生成两个简化文件,片段内容如下:

region_file_id.txt(片段)

{
  "id": "01007EF00011E000"
}
{
  "id": "0100225000FEE000"
}
{
  "id": "0100BCE000598000"
}
{
  "id": "0100B42001DB4000"
}
{
  "id": "01008A9001DC2000"
}

cnmts_titleId_otherApplicationId.txt(片段)

{
  "titleId": "0100000000010000",
  "otherApplicationId": "0100000000010800"
}
{
  "titleId": "0100000000010800",
  "otherApplicationId": "0100000000010000"
}
{
  "titleId": "010000000e5ee000",
  "otherApplicationId": "010000000e5ee800"
}
{
  "titleId": "010000000eef0000",
  "otherApplicationId": "010000000eef0800"
}
{
  "titleId": "010000000eef0800",
  "otherApplicationId": "010000000eef0000"
}
{
  "titleId": "0100000011d90000",
  "otherApplicationId": "0100000011d90800"
}
{
  "titleId": "0100000011d90800",
  "otherApplicationId": "0100000011d90000"
}
{
  "titleId": "0100000011d90800",
  "otherApplicationId": "0100000011d90000"
}

注:以上仅为文件片段,可运行脚本获取完整文件

需求说明

需要关联两个文件:region_file_id中的所有id均对应cnmts_titleId_otherApplicationId中的某个titleId(反之不成立),最终为每个id生成如下格式的JSON对象:

{
 "id": "111000",
 "titleId": "111000",(可选,与id重复)
 "otherApplicationId": "111800"
}

尝试过的无效命令

以下命令未能实现需求:

jq -s '.[0] * .[1]' $script_directory/region_file_id.txt cnmts_titleId_otherApplicationId.txt (仅返回1个对象)
jq -s '{ .[0] as $u | .[1] | select(.id == $u.titleId) |= $u }' $script_directory/region_file_id.txt cnmts_titleId_otherApplicationId.txt

已尝试的有效命令及遗留问题

使用以下命令可基本实现需求,但当region_file_id中的id在cnmts文件中无对应记录时,会出现null值:

jq -n --slurpfile ids region_file_id.txt  '
  INDEX(inputs; .titleId | ascii_upcase) as $dict
  | $ids[].id as $id
  | {$id} + $dict[$id]
' cnmts_titleId_otherApplicationId.txt > merged.txt

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 05:25:26