在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
相关产品推荐
相关产品推荐

