我怎样才能按行获取一些文本块?
我有一个包含 6000000 行的日志文件,我只想获取 607366 到 700000 的块。
我尝试过类似的事情:
head -n 607366 | tail -700000 server.log > outputFile.txt
答案1
您可以使用sed
:
sed -n 607366,700000p server.log > outputFile.txt
如果您想使用head
和tail
,这是正确的方法:
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
这样,当我们找到第 700000行q
后,我们就停止读取( )。server.log
head -n 700000 server.log | tail -n "$((700000-607366+1))"
这里不需要调用bc
,我们可以用标准算术扩展。
但反过来做就会更有效率:
tail -n +607366 | head -n "$((700000-607366+1))"
因为它不需要在内存中存储大量的行。