如何在大文本文件的开头插入文本?

Alw*_*ays 2 c java linux

有一个大约44G的文件。我想在第一行之前添加一些内容。我试过用sed。像这样

sed -i '1iSome content' /home/always/test.dat
Run Code Online (Sandbox Code Playgroud)

然而,它花费大约100分钟。有没有更快的方法?任何方式都可以。例如Java、C、Linux工具...

实际场景我想导入一个csv到neo4j数据库。我的步骤是:

  1. 从 hive 导出一个 csv 到 hdfs(我不能使用 hive 表头,因为它不是 neo4j 想要的。)
  2. 将 csv 文件下载到本地文件系统。
  3. 向 csv 文件添加标题(neo4j-admin 导入需要它)

Ste*_*n C 6

没有办法在不涉及重写整个文件的文件开头插入任意数量的文本。无论您使用何种语言或工具,这都适用。

您可能会通过使用除此之外的其他方法sed 来加快速度1,但瓶颈将是磁盘/文件系统 IO。

为了获得更好的性能:

  • 将数据视为字节并使用系统调用read(2)和大缓冲区进行复制write(2),或
  • 使用sendFile(2)系统调用,以便不需要通过用户空间缓冲区复制数据,或
  • 如果插入的数据是(或可以填充到)文件系统块大小的精确倍数并且文件系统支持,fallocate(2)那么您可以使用它来插入数据而无需复制2

C 可能是编写此代码的最佳语言。

或者,如果您想坚持使用现有的命令行实用程序,使用catdd使用适当的标志可能比sed.


1 -sed很可能将输入分成几行,然后在用户空间缓冲区中重新组装这些行。这是不必要的。

2 - 填充可能包含额外的空格或“注释”行……假设正在读取文件的应用程序可以处理这些。如果可以,请参阅/sf/answers/4170032541/以获取示例代码以帮助您入门。