从非常大的文件中删除行的快速方法

从非常大的文件中删除行的快速方法

我有一个 67GB .csv 文件(我知道...我知道...)

我需要从文件中删除第 4,125,878 行,因为它已损坏。我的 CSV 解析工具不会忽略或跳过它。

可以用来sed做类似的事情

sed '4125878d' in.csv > out.csv

但就时间和磁盘空间而言,这将是一项非常昂贵的操作。

如果我使用sed -i '4125878d' in.csv,操作需要很长时间。

有什么办法我可以迅速地从一个大文件的中间删除一行?

答案1

我相信不会。

即使 sed 或您使用的任何程序足够聪明,可以就地进行更改而不是使用临时文件,它仍然必须在您要删除的行开始之后重写所有数据。

删除一行意味着您将文件的所有内容从该点左移到上一行的末尾。无论如何,您仍然需要从那时起重写该文件。

答案2

即时执行:

csv-parser -f <(cat my-huge.csv | sed '4125878d')

相关内容