sed不工作大文件[寻找其他选择]

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sed不工作大文件[寻找其他选择]相关的知识,希望对你有一定的参考价值。

我有一个巨大的json文件,意外输出所有json条目之间没有换行符。它被视为一条巨大的单一线路。所以我所做的就是尝试用sed找一个替换并插入一个换行符。

sed 's/{"seq_id"/
{"seq_id"/g' my_giant_json.json

它不输出任何东西

但是,我知道如果我只对文件的一小部分进行操作,那么我的sed表达式就可以正常工作了。

head -c 1000000 my_giant_json.json |  sed 's/{"seq_id"/
{"seq_id"/g'

我也试过用这个粗糙的一个衬里使用python

' {"seq_id'.join(open(json_file,'r').readlines()[0].split('{"seq_id')).lstrip()

但是由于readlines()方法,这会加载到内存中。但我不知道如何遍历一个巨大的单行字符(迭代块)并进行查找和替换。

有什么想法吗?

答案

Perl允许您将输入分隔符($/)从换行符更改为另一个字符。你可以利用这个来获得一些方便的分块。

perl -pe'BEGIN{$/="}"}s/^({"seq_id")/
$1/' my_giant_json.json

这将输入分隔符设置为"}"。然后它查找以{"seq_id"开头的块并用换行符作为前缀。

请注意,它在开头添加了一个不必要的空行。你可以使程序复杂化以消除它,或者只是手动删除它。

以上是关于sed不工作大文件[寻找其他选择]的主要内容,如果未能解决你的问题,请参考以下文章

jdbc mysql crud dao模型 sql注入漏洞 jdbc 操作大文件

SQL 查询 Distinct / Group By 不工​​作

java操作大文件复制

java 读写操作大文件 BufferedReader和RandomAccessFile

CGRect.offsetBy 不工​​作

通过自定义策略级别不工作为组件提供对 sharepoint 的完全信任