我在文件中有以下格式的数据:
<http://purl.uniprot.org/here> <http://purl.uniprot.org/here/unipot/purl>
<http://purl.uniprot.org/uniprot/Q196Y7> <http://purl.uniprot.org/core/annotation>
我想删除角括号内的所有“http://purl.uniprot.org”。这样我得到的输出是
<here> <here/unipot/purl>
<uniprot/Q196Y7> <core/annotation>
我试着用vi的replace命令来实现。但结果是相当慢,因为我的文件是1TB。使用linux/python有没有更有效的方法来做同样的事情
我知道我可以使用sed,但是sed找到了sed的模式并删除了它们,而我想删除确切的内容
As Radu Rădeanu said,
sed
是替换文件中字符串的好工具,因为它可以在流上工作,而不是试图将整个文件加载到内存中。你知道吗但是
sed
使用正则表达式,在您的情况下(1TB的输入数据),这可能太慢了。Unix工具通常可以处理任意大小的文件,它们的效率出奇的高,但是角落案例可能太多了。你知道吗如果您需要优化流程,以下是一些要点:
把大文件分成小文件。例如,如果这是一个日志文件,则每天创建一个文件,而不是将所有内容连接到一个大文件中。这样,您就可以在每个每日文件中剥离字符串一次。
编写一个小的C程序来搜索精确的字符串(而不是使用regexp)。然后可以使用Boyer-Moore之类的优化来获得巨大的性能提升。您还应该考虑使用内存映射I/O。
这应该从命令行执行:
您可以先不使用
-i
参数来查看控制台中的输出。你知道吗你所说的是什么意思,但结果却是相当“?完全是什么? 如果是我,vi就是一个很好的例子工具运行此命令:
相关问题 更多 >
编程相关推荐