我有一个大文本文件(>500GB),我能找到的所有方法(sed/tail 等)都需要将 500GB 内容写入磁盘。有没有办法快速删除前几行而不将 500GB 写入磁盘?
答案1
您可以使用sed
以下选项来就地删除行-i
:
$ cat foo.txt
bar
baz
lorem
$ sed -i '1d' foo.txt
$ cat foo.txt
baz
lorem
您还可以删除一系列行;例如sed -i '1,4d' foo.txt
将删除第 1-4 行。
编辑:正如唐在评论中指出的那样,该-i
选项仍然创建副本。
答案2
通过以这种方式使用 tail 命令:
# tail -n +<lines to skip> filename
例如:
tail -n +1000 hugefile.txt > hugefile-wo-the-first-1000-lines.txt
仅此而已。- 欲了解更多信息:https://es.wikipedia.org/wiki/Tail
顺便说一句:如果有人告诉您这与您想要做的完全相反,请不要被愚弄,我已经测试过:
$ tail -n +3 /tmp/test
3
4
5
$ cat /tmp/test
1
2
3
4
5