如何在 bash 中使用 jq 创建 for 循环
How to create for-loops with jq in bash
我正在尝试将 json 文件拆分为多个 json 文件。输入 (r1.json) 看起来像:
{
"results" : [
{
content 1
}
,
{
content 2
}
,
{
content n
}
]
}
我希望输出为 n 个文件:1.json、2.json、n.json。分别包含{content 1}、{content 2}和{content n}。
我试过了:
for i in {0..24}; do cat r1.json | jq '.results[$i]' >> $i.json; done
但是我有以下错误:error: i is not defined
尝试
for i in {0..24}; do cat r1.json | jq ".results[$i]" >> $i.json; done
请注意,shell 变量不能在单引号内展开。
IHTH
单引号可能让您感到困惑。 Bash 变量没有用单引号展开。您正在将文字字符串 .results[$i]
传递给 jq
。试试双引号:
for i in {0..24}; do
cat r1.json | jq ".results[$i]" >> $i.json
done
虽然上面的答案是正确的,但请注意,在 jq 脚本中插入 shell 变量对于除了最琐碎的脚本之外的所有脚本来说都是一个糟糕的主意。在提供的任何解决方案中,替换以下内容:
jq ".results[$i]"
具有以下内容:
jq --arg i "$i" '.results[$i | tonumber]'
我正在尝试将 json 文件拆分为多个 json 文件。输入 (r1.json) 看起来像:
{
"results" : [
{
content 1
}
,
{
content 2
}
,
{
content n
}
]
}
我希望输出为 n 个文件:1.json、2.json、n.json。分别包含{content 1}、{content 2}和{content n}。
我试过了:
for i in {0..24}; do cat r1.json | jq '.results[$i]' >> $i.json; done
但是我有以下错误:error: i is not defined
尝试
for i in {0..24}; do cat r1.json | jq ".results[$i]" >> $i.json; done
请注意,shell 变量不能在单引号内展开。
IHTH
单引号可能让您感到困惑。 Bash 变量没有用单引号展开。您正在将文字字符串 .results[$i]
传递给 jq
。试试双引号:
for i in {0..24}; do
cat r1.json | jq ".results[$i]" >> $i.json
done
虽然上面的答案是正确的,但请注意,在 jq 脚本中插入 shell 变量对于除了最琐碎的脚本之外的所有脚本来说都是一个糟糕的主意。在提供的任何解决方案中,替换以下内容:
jq ".results[$i]"
具有以下内容:
jq --arg i "$i" '.results[$i | tonumber]'