我有一个 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')