假设我有一个大文本文件,其中包含100M
行;删除其中前N行(例如50M
行)的最有效方法是什么。
正如我尝试的那样,仅使用vim打开此文件将花费几分钟。
还有没有更有效的方法来实现这一目标?
答案 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。