我想知道是否可以转换以下格式
{"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 文件大小为 127 GB,共有 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