我怎么能JQ嵌套的for循环从bash的? [英] How can I do jq nested for-loops from bash?
问题描述
我有一个包含各25结果(0〜24)52 JSON文件(R $ i.json)。我想创建一个JSON文件为每个这些结果的一个特别的名字。名称将根据每个这些结果的内容组成:YYYYMMDDHHMMSS_company_jobtitle.json
命令生成的名字很好地工作:
#!斌/庆典
为((J = 0; J< = 24; J ++))
做
datein = $(JQ<r1.json。结果[$ J] .date| sed的'S /// G')
dateout = $(日期-d$ {} datein+%Y%M%D%H%M%S)
公司= $(JQ<r1.json。结果[$ J]。公司| sed的'S /,//克; S ///克; S / // G')
工作= $(JQ<r1.json。结果[$ J] .jobtitle| sed的'S /,//克; S ///克; S / // G')
JQ<r1.json。结果[$ j]的> $ {dateout} _ $ {}公司_ $ {}工作以.json
DONE
现在,当我更换R1由R $ i和增加((i = 1; I< = 52; J ++)),这是行不通的。所以我想我的问题来自于JQ嵌套循环语法..
r1.json会是什么样子的:
{ 半径:25,
使用totalResults:1329, 结果: {
JOBTITLE:JOB1,
公司:公司1,
日期:孙,2015年9月1日7时59分58秒格林尼治标准时间,
}
,
{
JOBTITLE:JOB2,
公司:Company2的
日期:孙,2015年9月2日7时59分58秒格林尼治标准时间,
}
,
| ...]
{
JOBTITLE:job25,
公司:company25,
日期:孙,2015年9月25日7时59分58秒格林尼治标准时间,
} ]
}
我终于找到了解决办法,我的问题不是来自JQ但是从语法,我使用嵌套循环...这是
为((i = 1; I< = KDR;我+ +))
做
为((J = 0; J< = 24; J ++))
做
datein = $(JQ<R $ i.json。结果[$ J] .date| sed的'S /// G')
dateout = $(日期-d$ {} datein+%Y%M%D%H%M%S)
公司= $(JQ<R $ i.json。结果[$ J]。公司| sed的'S /,//克; S ///克; S / // G')
工作= $(JQ<R $ i.json。结果[$ J] .jobtitle| sed的'S /,//克; S ///克; S / // G')
JQ<R $ i.json。结果[$ j]的> $ {dateout} _ $ {}公司_ $ {}工作以.json
DONE
DONE
I have 52 json files (r$i.json) containing each 25 results (0 to 24). I'd like to create a json file with a special name for each of these results. The name would be composed according to the content of each of these results : YYYYMMDDHHMMSS_company_jobtitle.json
the command generating names work fine :
#!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
Now when I replace r1 by r$i and add ((i=1;i<=52;j++)) it doesn't work... So I guess my problem comes from nested loop syntax in jq...
r1.json would look like that :
{
"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",
}
]
}
Finally I found the solution, and my issue didn't come from jq but from the syntax I was using for nested loops... Here it is :
for ((i=1;i<=kdr;i++))
do
for ((j=0;j<=24;j++))
do
datein=$(jq <"r$i.json" ".results[$j].date" | sed 's/"//g')
dateout=$(date -d "${datein}" +"%Y%m%d%H%M%S")
company=$(jq <"r$i.json" ".results[$j].company" | sed 's/,//g;s/"//g;s/ //g')
job=$(jq <"r$i.json" ".results[$j].jobtitle" | sed 's/,//g;s/"//g;s/ //g')
jq <"r$i.json" ".results[$j]" > ${dateout}_${company}_${job}.json
done
done
这篇关于我怎么能JQ嵌套的for循环从bash的?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!