将JSON拆分为多个文件

时间:2017-05-27 10:50:50

标签: json shell awk jq multiple-files

我有从mongodb导出的json文件,它看起来像:

{"_id":"99919","city":"THORNE BAY"}
{"_id":"99921","city":"CRAIG"}
{"_id":"99922","city":"HYDABURG"}
{"_id":"99923","city":"HYDER"}

大约有30000行,我想将每行分成自己的.json文件。 (我试图将我的数据传输到couchbase群集)

我试过这样做:

cat cities.json | jq -c -M '.' | \
while read line; do echo $line > .chunks/cities_$(date +%s%N).json; done

但是我发现它似乎丢弃了一行,并且运行这个命令的输出只给了我50个奇怪的文件,当我期待30000多个!!

是否有一种合理的方法可以使用任何可以套装的数据来删除任何数据?

2 个答案:

答案 0 :(得分:5)

假设您不关心确切的文件名,如果您想将输入拆分为多个文件,只需使用split

jq -c . < cities.json | split -l 1 --additional-suffix=.json - .chunks/cities_

答案 1 :(得分:1)

通常,在任何UNIX系统上使用任何awk将任何文本文件拆分为单独的文件只是:

awk '{close(f); f=".chunks/cities_"NR".json"; print > f}' cities.json