![대용량 JSON 파일 형식 변환](https://linux55.com/image/168438/%EB%8C%80%EC%9A%A9%EB%9F%89%20JSON%20%ED%8C%8C%EC%9D%BC%20%ED%98%95%EC%8B%9D%20%EB%B3%80%ED%99%98.png)
다음 형식으로 변환이 가능한지 알고 싶습니다.
{"timestamp":"1579053433","name":"1.10.207.64","value":"node-fnk.pool-1-10.dynamic.totinternet.net","type":"ptr"}
{"timestamp":"1579067130","name":"1.10.207.65","value":"node-fnl.pool-1-10.dynamic.totinternet.net","type":"ptr"}
{"timestamp":"1579098581","name":"1.10.207.66","value":"node-fnm.pool-1-10.dynamic.totinternet.net","type":"ptr"}
그리고 마침내 얻는다
1.10.207.64-1.10.207.64::node-fnk.pool-1-10.dynamic.totinternet.net;
1.10.207.65-1.10.207.65::node-fnl.pool-1-10.dynamic.totinternet.net;
1.10.207.66-1.10.207.66::node-fnm.pool-1-10.dynamic.totinternet.net;
JSON 파일 크기는 127GB, 행 1,267,984,961개입니다. 각 줄에서 변경되는 유일한 사항은 IP와 호스트 이름입니다.
답변1
시도해 볼 수 있습니다 jq
. 예를 들어 \(...)
문자열 보간을 사용하여
jq -r '"\(.name)-\(.name)::\(.value);"' file.json
내가 아는 한, 명시적으로 지시하지 않는 한( -s
/ --slurp
옵션을 사용하여) 전체 파일을 읽으려고 시도하지 않습니다.느린, 파일 크기에 관계없이 차단되어서는 안됩니다.
답변2
ctrl-alt-delor
에서 와 같이논평, python
옵션입니다
예를 들어 비교적 새로운 python3
버전을 사용하면
import sys, json
for line in sys.stdin:
doc = json.loads(line)
print(f'{doc["name"]}-{doc["name"]}::{doc["value"]}')
이를 파일(예 parse_json.py
: )에 넣고 다음과 같이 실행할 수 있습니다.
python3 parse_json.py <json.file