次の形式に変換できるかどうかを知りたいです。
{"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