Linux 如何编辑大文件

Linux 如何编辑大文件,linux,file,Linux,File,想象一下,一个巨大的文件应该由我的程序编辑。为了增加读取时间,我使用mmap(),然后只读取我正在查看的部分。但是,如果我想在文件中间添加一行,那么最好的方法是什么? 是添加一行然后移动文件其余部分的唯一方法吗?听起来很贵 所以我的问题基本上是: 在一个大文件的中间添加数据最有效的方法是什么? < P>在任何(大或小)文件(Linux或POSIX)中间插入数据的唯一方法是将该文件复制到一个新文件中,然后将该副本作为原始文件复制。因此,您将复制它的头部(直到插入点),将数据附加到该副本,然后复制尾

想象一下,一个巨大的文件应该由我的程序编辑。为了增加读取时间,我使用mmap(),然后只读取我正在查看的部分。但是,如果我想在文件中间添加一行,那么最好的方法是什么?

是添加一行然后移动文件其余部分的唯一方法吗?听起来很贵

所以我的问题基本上是:
在一个大文件的中间添加数据最有效的方法是什么?

< P>在任何(大或小)文件(Linux或POSIX)中间插入数据的唯一方法是将该文件复制到一个新文件中,然后将该副本作为原始文件复制。因此,您将复制它的头部(直到插入点),将数据附加到该副本,然后复制尾部(在插入点之后)。您也可以考虑调用(甚至Linux特定的……),但这并不意味着需要复制所有的数据。可能用于替换,但无论您做什么,都需要复制所有数据

当然,如果你在文件中间用一个相同大小的块替换一个数据块(所以没有真正的插入),你可以使用Prime+

是添加一行然后移动文件其余部分的唯一方法吗?听起来很贵

是的,从概念上讲,这是唯一的方法


<>你应该考虑使用一个纯文本文件的其他东西:查看或(它们在你的用例中非常有效)。另见。它们都为您提供了比POSIX文件更高的抽象性,因此提供了“插入”数据的能力(当然,它们仍然是基于内部和使用POSIX文件)。

< P>在任何(大或小)文件(Linux或POSIX)的中间插入数据的唯一方法是复制该文件。(到一个新的,然后复制原件)。所以你会复制它的头(到插入点),你会把数据附加到那个拷贝,然后复制尾部(插入点之后)。你也可以考虑调用(或者甚至是Linux特定的……)。但这并不意味着需要复制所有数据。可能用于替换,但无论您做什么,都需要复制所有数据

当然,如果你在文件中间用一个相同大小的块替换一个数据块(所以没有真正的插入),你可以使用Prime+

是添加一行然后移动文件其余部分的唯一方法吗?这听起来很昂贵

是的,从概念上讲,这是唯一的方法


你应该考虑使用一个纯文本文件的其他东西:查看或(它们在你的用例中可能是非常有效的)。同样,这两种方法都提供了比POSIX文件更高的抽象性,所以给你插入数据的能力(当然它们仍然是基于内部和使用POSIX文件)。与lseek和write分开很重要。我认为与lseek和write分开的“当然”部分很重要。正如旁注一样,当你询问“编辑”时编辑大文件:如果你想找一个好的编辑器来做这些事情,我会推荐你使用VisualSlick。是的,这是一个商业产品;但根据我的经验,在处理真正的大文件时,它是迄今为止最好的编辑器。正如你提到的“编辑”一样处理大文件:如果你想找一个好的编辑器来做这些事情,我会推荐你使用VisualSlick。是的,它是一个商业产品;但根据我的经验,它是处理真正大文件时最好的编辑器。