我有一个巨大的 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() 方法,这会加载到内存中。但我不知道如何迭代巨大的单行字符(分块迭代)并进行查找和替换。
有什么想法吗?
最佳答案
Perl 允许您将输入分隔符 ($/
) 从换行符更改为另一个字符。您可以利用这一点来获得一些方便的分块。
perl -pe'BEGIN{$/="}"}s/^({"seq_id")/\n$1/' my_giant_json.json
这将输入分隔符设置为"}"
。然后它会查找以 {"seq_id"
开头的 block 并以换行符作为前缀。
请注意,它在开头放置了一个不必要的空行。您可以使程序复杂化以消除该问题,或者在之后手动将其删除。
关于python - sed 不适用于大文件[寻找其他选项],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48388833/