2013-10-25 52 views
-1

我有一个包含大量行的大文件。文件系统已满。想要删除文件中的所有行,但保留最后50000行

我想你的帮助家伙,建议我一个解决方案,以便我可以从该文件中删除所有行但不是最后50000行。我想要解决方案可以删除现有文件中的行,以便我可以留下一些空间。

+0

计算文件中行的数量,然后确定第50.000th行,但最后一行开始,并读取并写入到新文件。请注意它*有*为新文件,请注意,因此在删除原始文件之前,您应该有足够的存储空间来存储这样的文件。 – Sumurai8

回答

2

这种用途tail

tail -n 50000 file > new_file 

甚至

tail -50000 file > new_file 

要保存在同一文件的输出,你可以这样做:

tail -n 50000 file > new_file && mv new_file file 

这将节省输出在tail命令正确执行的情况下将会替换原始文件的临时文件。


man tail

尾 - 输出文件的

-n,--lines = K

输出的最后K行,而不是最后部分最后10个;或者使用-n + K到 开始第k个

+1

除了这在已经完整的文件系统上不起作用。 :( – ams

+0

把文件输出到另一个文件系统怎么办?它应该是这样的,服务器有多个文件系统是很正常的。 – fedorqui

+0

当然,这是行得通的。 – ams

1

输出线使用sed你可以说:

sed -e :a -e '$q;N;50001,$D;ba' filename 

如果要修改就地文件,说:

sed -i -e :a -e '$q;N;50001,$D;ba' filename 
相关问题