【发布时间】:2015-09-09 04:08:02
【问题描述】:
我正在使用jq 开发一个 Yelp json 语料库,拼命地尝试完成一些加入和过滤任务。
business.json 包含 categories 和 business_id,我可以从中获取餐厅的所有 id,使用它们来过滤 review.json 提取餐厅的所有评论。
在 RDBMS 中听起来很简单,但我想学习 jq 方式。
谁能帮忙?
我尝试过的事情。
提取的企业 ID 并保存在 id.txt 中。但是在
jq中引用id.txt是不可能的。在脚本循环所有 id 并执行
jq --arg id $line '. | select( .business_id | contains($id))' reviews.json加入这两个 json 文件也许是可能的,但我不愿意这样做,因为文件的大小 (~1G)
根据cmets编辑:
简化样本输入: 业务.json
{
“business_id”:“vcNAWiLM4dR7D2nwwJ7nCA”,
"full_address": "4840 E Indian School Rd\nSte 101\nPhoenix, AZ 85018", > >
“类别”:[“餐厅”]
}
reviews.json
{
“日期”:“2012-05-15”,
"text": "上周收到一封邮件,信中说 Goldberg 博士将于 6 月搬到亚利桑那州担任新职位。我们会非常想念他。\n\n我想找个新医生在纽约,你真正喜欢的可能几乎和找约会一样糟糕!",
“类型”:“评论”,
“business_id”:“vcNAWiLM4dR7D2nwwJ7nCA” }
最佳尝试: 能够对具有多个 id 的文档进行行进,例如
jq '. | select( .business_id | contains("LRKJF43s9-3jG9Lgx4zODg", "uGykseHzyS5xAMWoN6YUqA"))' reviews.json
但无法用变量替换查询字符串,
jq --arg t vcNAWiLM4dR7D2nwwJ7nCA '. | select( .business_id | contains(env.t))' reviews.json 不起作用
【问题讨论】:
-
请添加一个有意义的输入数据样本(即 JSON)以及您在 jq 中最有希望的尝试。
-
感谢您的回复。我在原始帖子中进行了编辑。
-
关于你的上一个 sn-p,使用
$t而不是env.t应该可以工作。 -
哦,是的,谢谢。然而,这并不是我所需要的。
-
我也试过使用 while IFS='' read -r line || [[ -n "$line" ]];做; jq --arg id $line '. | select(.business_id | contains($id))' review.json done