Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将JSON拆分为多个文件_Json_Shell_Awk_Jq - Fatal编程技术网

将JSON拆分为多个文件

将JSON拆分为多个文件,json,shell,awk,jq,Json,Shell,Awk,Jq,我从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 '

我从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多个


有没有一种合乎逻辑的方法可以使它不使用任何适合的东西删除任何数据?

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

jq-c.
通常,在任何UNIX系统上使用任何awk将任何文本文件拆分为每行单独的文件只需:

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

不太有效我得到了
拆分:非法选项--
:(为osx解决了这个问题,您需要安装coreutils:
brew安装coreutils
。然后使用
gsplit
而不是
拆分
:)如果您真的不关心输出文件名,
gsplit
仅对
--附加后缀
选项是必需的。BSD
日期
不支持
%N
作为几分之一秒。因为每秒只生成一次唯一的输出文件名,并且每秒处理的行远远不止一行,所以正在丢失行。
awk '{close(f); f=".chunks/cities_"NR".json"; print > f}' cities.json