【发布时间】:2015-12-29 11:21:50
【问题描述】:
我有 52 个 json 文件 (r$i.json),每个文件包含 25 个结果(0 到 24)。我想为每个结果创建一个具有特殊名称的 json 文件。该名称将根据每个结果的内容组成:YYYYMMDDHHMMSS_company_jobtitle.json
生成名称的命令工作正常:
#!bin/bash
for ((j=0;j<=24;j++))
do
datein=$(jq <"r1.json" ".results[$j].date" | sed 's/"//g')
dateout=$(date -d "${datein}" +"%Y%m%d%H%M%S")
company=$(jq <"r1.json" ".results[$j].company" | sed 's/,//g;s/"//g;s/ //g')
job=$(jq <"r1.json" ".results[$j].jobtitle" | sed 's/,//g;s/"//g;s/ //g')
jq <"r1.json" ".results[$j]" > ${dateout}_${company}_${job}.json
done
现在,当我用 r$i 替换 r1 并添加 ((i=1;i
r1.json 看起来像这样:
{
"radius" : 25,
"totalResults" : 1329,
"results" : [
{
"jobtitle" : "job1",
"company" : "company1,
"date" : "Sun, 01 Sep 2015 07:59:58 GMT",
}
,
{
"jobtitle" : "job2",
"company" : "company2",
"date" : "Sun, 02 Sep 2015 07:59:58 GMT",
}
,
|...]
{
"jobtitle" : "job25",
"company" : "company25,
"date" : "Sun, 25 Sep 2015 07:59:58 GMT",
}
]
}
【问题讨论】:
-
您意识到您可以在一次
jq调用(每个输出文件)中完成所有这些逻辑吗?它是一种强大得多的脚本语言,远比您在这里所称赞的要强大。 -
另外,“不起作用”——如何不起作用?如果您收到错误消息,请显示确切的错误消息。
-
感谢@CharlesDuffy 现在它可以工作了。不过,我很想知道更多关于 jq 脚本语言的信息。你有一些好的参考资料可以分享吗?
-
stedolan.github.io/jq/manual 是规范来源。请注意,它允许您使用
+运算符将字符串连接在一起,因此您可以在jq一侧将它们组合成一个,而不是通过单独的调用检索所有这些值然后将它们组合在一起。 -
...现在,这并不是说它不能全部归结为仅一个 jq 实例生成一个输出流,读取它的 bash 实例可以循环并拆分为多个文件——但一个人必须对此很聪明。我有一些想法,但我想先测试一下。
标签: bash shell for-loop nested jq