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

pxiryf3j  于 2023-06-30  发布在  Shell
关注(0)|答案(1)|浏览(209)

假设我有一个包含100M行的大文本文件;删除前N行最有效的方法是什么,例如50M行。
正如我所尝试的那样,仅用vim打开这个文件就需要几分钟。
有没有更有效的方法来实现这一点?

ohtdti5x

ohtdti5x1#

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

如果你没有足够的存储空间来复制输入文件,那么就可以在适当的位置编辑它(即不像所有的命令行“就地”编辑工具(如sedperl等)那样使用临时文件。使用,也不是像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

相关问题