我在文件中有以下格式的数据:
<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 find的模式并删除它们而我想删除确切的内容
答案 0 :(得分:1)
这应该来自命令行:
sed -i 's/http:\/\/purl.uniprot.org\///g' /path/to/filename
您可以先没有-i
参数尝试查看控制台中的输出。
答案 1 :(得分:1)
As Radu Rădeanu said,sed
是替换文件中字符串的好工具,因为它适用于流而不是尝试将整个文件加载到内存中。
但sed
使用正则表达式,在您的情况下(1TB输入数据),这可能太慢了。 Unix工具通常可以处理任意大小的文件,并且它们的效率非常高,但极端情况可能太多了。
如果您需要优化流程,请参考以下几点:
将大文件拆分成较小的文件。例如,如果这是一个日志文件,则每天创建一个文件,而不是将所有内容连接到一个巨大的文件中。这样,您可以在每个每日文件中删除字符串一次。
编写一个小型C程序,搜索确切的字符串(而不是使用正则表达式)。然后,您可以使用Boyer-Moore之类的优化来获得巨大的性能提升。您还应该考虑使用内存映射I / O.
答案 2 :(得分:0)
你是什么意思“但事实证明它非常”?什么呢? 如果是我,vi只是一个非常好的工具。运行此命令:
:s/http:\/\/purl.uniprot.org\//g