2016-07-06 104 views
1

我目前正在使用CSV文件,它的大小可以是10的GB,并且需要根据使用情况动态地编辑头文件。当只编辑第一行时,linux sed读取整个文件

对于此我使用:

sed -i '1,1s/id/id:ID(Person)/g' etc. 

其具有仅编辑标题中的期望的效果,但可以采取向上10秒来完成。我想这是因为整个文件仍在流式传输,但我无法找到解决这个问题的办法。

任何想法或正确的方向点将不胜感激。

+3

如果不重写整个文件来移动数据,它将如何适应11个字节?你想'ID(Person)'覆盖接下来的11个字节? – TessellatingHeckler

+0

@Thomas:我的评论不合适。删除了。所以这会很快。 ;) – sjsam

+0

这是I/O限制。你把运行时间与'cat file> file.copy'比较了吗?你将无法走得更快。 –

回答

1

sed不是问题所在。问题是您正在流式传输10GB文件。如果这是您正在进行的唯一操作,则sed可能不会比其他任何基于行的实用程序(awk等)差得多。

如果你首先阅读整个文件,Perl可能会做得更好,但是你的内存占用将非常大,并且取决于你的系统,你可能会开始分页。

如果这是您经常要做的事情,并且很长一段时间,您可以通过读取更大的数据块,以较低级别的语言做得更好,从而允许块层为您优化磁盘访问。如果你保留“块”足够大的块层,但足够小,以避免分页,你应该能够击中甜蜜点。

可能不值得1转换。