在Linux Shell中删除大型100M行文件的前N行的有效方法

时间:2019-05-14 02:23:44

标签: shell

假设我有一个大文本文件,其中包含100M行;删除其中前N行(例如50M行)的最有效方法是什么。

正如我尝试的那样,仅使用vim打开此文件将花费几分钟。

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

1 个答案:

答案 0 :(得分:3)

tail -n +50000000 file > tmp && mv tmp file

如果您没有足够的存储空间来复制输入文件,则可以对其进行真正的编辑(即,不像所有sed这样的命令行“ inplace”编辑工具那样使用临时文件, perl等使用,也不像ed使用的那样缓冲输入文件的大小):

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

有关最后一个脚本的更多信息,请参见https://stackoverflow.com/a/17331179/1745001