我有一个巨大的json文件,意外输出所有json条目之间没有换行符。它被视为一条巨大的单一线路。所以我所做的就是尝试用sed找一个替换并插入一个换行符。
sed 's/{"seq_id"/\n{"seq_id"/g' my_giant_json.json
它不会输出任何内容
但是,如果我只对文件的一小部分进行操作并且工作正常,我知道我的sed表达式正常工作。
head -c 1000000 my_giant_json.json | sed 's/{"seq_id"/\n{"seq_id"/g'
我也尝试过使用python和这个粗糙的一个衬里
'\n{"seq_id'.join(open(json_file,'r').readlines()[0].split('{"seq_id')).lstrip()
但是由于readlines()方法,这会加载到内存中。但我不知道如何遍历一个巨大的单行字符(迭代块)并进行查找和替换。
有什么想法吗?
答案 0 :(得分:3)
Perl允许您将输入分隔符($/
)从换行符更改为另一个字符。你可以利用它来获得一些方便的分块。
perl -pe'BEGIN{$/="}"}s/^({"seq_id")/\n$1/' my_giant_json.json
将输入分隔符设置为"}"
。然后,它会查找以{"seq_id"
开头的块,并在其前面添加换行符。
请注意,它会在开头添加一个不必要的空行。你可以使程序复杂化以消除它,或者只是在之后手动删除它。