2017-05-27 126 views
2

我從MongoDB的出口JSON文件,它看起來像: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 

,但我發現,它似乎下降線的負載和運行此命令的輸出只當我期待30000奇怪時,給了我50個奇怪的文件!

有沒有一種合乎邏輯的方式來使這不會使用任何套件將任何數據刪除?

+1

BSD'date'不支持'%N'作爲幾分之一秒。由於每秒只生成一次唯一的輸出文件名,並且每秒處理的行數遠遠超過一行,所以會丟失行數。 – chepner

回答

3

假設你不關心確切的文件名,如果你想分割輸入到多個文件,只需使用split

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

不太合適我得到'split:非法選項 - -' :( – cmdv

+1

解決了osx需要安裝coreutils:'brew install coreutils'。然後使用'gsplit'而不是'split': ) – cmdv

+1

如果你真的不關心輸出文件名,'gsplit'只對'--additional-suffix'選項是必需的。 – chepner

1

一般而言任何文本文件分割成每行使用任何UNIX系統上的任何AWK單獨的文件很簡單:

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