如何在不读取的情况下删除大文件的最后2行

时间:2011-09-26 22:38:40

标签: file unix

我有一个100GB的文件,需要删除它的最后两行。 我不想从中读取,因为它需要大约一个小时才能到达底部,因此sed似乎不是一种选择。

我的磁盘太小,无法复制该文件。

我有什么选择?

感谢。

2 个答案:

答案 0 :(得分:0)

我非常肯定在.Net中你可以将FileStream打开到一个文件,然后将指针移动到一个特定的字节(你可以计算),然后从那里修改它。但是,我不确定当你尝试保存它时是否必须传递整个流,所以如果你只需要复制最后两行,这可能会更有用。

答案 1 :(得分:0)

在C / POSIX中,您应该能够使用fseekSEEK_END选项从文件末尾备份一点(比如512字节),然后{{1}那512个字节进入内存。

由此,您可以准确找出倒数第二行的确切位置,然后使用readtruncate在该点实际截断文件。

如果最后两行超过512个字节(即,您读取的块中没有显示第二个最后一行的开头),只需将该值增加到1024并再试一次。继续往前走,直到找到它。