linux shell中删除100M行大文件前N行的有效方法

Dyl*_* Su -1 shell

假设我有一个包含100M行的大型文本文件;删除它的前N行,例如50Mlines.txt,最有效的方法是什么?

正如我所尝试的,仅使用 vim 打开该文件将需要几分钟的时间。

有没有更有效的方法来实现这一目标?

Ed *_*ton 5

tail -n +50000000 file > tmp && mv tmp file
Run Code Online (Sandbox Code Playgroud)

如果您没有足够的存储空间来几乎复制输入文件,那么要真正就地编辑它(即不使用像所有命令行“就地”编辑工具(如 、sed等)那样的临时文件perl,也不使用缓冲区输入文件的大小(如ed使用)您可以这样做:

bytes=$(head -50000000 file |wc -c)
dd if=file bs="$bytes" skip=1 conv=notrunc of=file
truncate -s "-$bytes" file
Run Code Online (Sandbox Code Playgroud)

有关最后一个脚本的更多信息,请参阅/sf/answers/1213182561/ 。