我一直在使用精彩的JQ library来解析和提取JSON数据,以方便重新导入。我能够轻松地提取范围,但不确定如何在脚本中循环并检测文件的结尾,最好是在bash或fish shell脚本中。
鉴于包含在"结果" 字典中的JSON文件,如何检测文件的结尾?
从测试中,我可以看到我将在我想要的结构中嵌套一个空数组,但是如何检测文件结束条件?:
jq '{ "results": .results[0:500] }' Foo.json > 0000-0500/Foo.json
谢谢!
答案 0 :(得分:1)
我建议使用jq将数组拆分为所需的JSON对象流(每行一个),然后使用其他工具(例如awk)填充文件。以下是第一部分的完成方式:
def splitup(n):
def _split:
if length == 0 then empty
else .[0:n], (.[n:] | _split)
end;
if n == 0 then empty elif n > 0 then _split else reverse|splitup(-n) end;
# For the sake of illustration:
def data: { results: [range(0,20)]};
data | .results | {results: splitup(5) }
调用:
$ jq -nc -f splitup.jq
{"results":[0,1,2,3,4]}
{"results":[5,6,7,8,9]}
{"results":[10,11,12,13,14]}
{"results":[15,16,17,18,19]}
对于第二部分,您可以(例如)将jq输出传递给:
awk '{ file="file."++n; print > file; close(file); }'
您可能感兴趣的变体会让jq过滤器在备用行上发出文件名和JSON;然后awk脚本也会读取文件名。