如何通过终端获取文本文件的一部分

如何通过终端获取文本文件的一部分

我怎样才能按行获取一些文本块?

我有一个包含 6000000 行的日志文件,我只想获取 607366 到 700000 的块。

我尝试过类似的事情:

head -n 607366 | tail -700000 server.log > outputFile.txt

答案1

您可以使用sed

sed -n 607366,700000p server.log > outputFile.txt

如果您想使用headtail,这是正确的方法:

head -n 700000 server.log | tail -n $(echo 700000-607366+1 | bc) > outputFile.txt

或者更短:

head -n 700000 server.log | tail -n 92635 > outputFile.txt

答案2

对 Radu 的优化:

sed '607366,$!d;700000q' server.log > outputFile.txt

这样,当我们找到第 700000q后,我们就停止读取( )。server.log

head -n 700000 server.log | tail -n "$((700000-607366+1))"

这里不需要调用bc,我们可以用标准算术扩展。

但反过来做就会更有效率:

tail -n +607366 | head -n "$((700000-607366+1))"

因为它不需要在内存中存储大量的行。

相关内容