从行开始的Unix cat


40

从特定行(从70000这样大的数字)开始的文件输出的最佳方法是什么。就像是:

cat --line=70000 <file>

Answers:


60

更精确地看一下尾巴,它是--lines = + N开关:

tail --lines=+100 <file>

哇。即使在Linux上使用了8年,我也不知道!我总是用bash fn!谢谢 !getFromLine(){lineno = wc -l $1 | awk '{print $1}'; lineno = expr $lineno - $2; tail -n $ lineno $ 1; }
secureBadshah

2
请注意,这不适用于Mountain Lion(Darwin内核版本13.1.0)。山狮的变体是tail -n
考希克·哥斯

22

最明显的方法是tail。语法可能会略有不同,具体取决于所使用的操作系统:

tail -n +70000

如果您无法tail上班,可以使用sed,但最终可能会变慢:

sed -pe '1,69999d'

tailMinGW(600 MB文本文件)中工作得很好。运行时间只有几秒钟(但是输入文件可能已经在文件缓存中了)。
Peter Mortensen

2

如果您需要从包含给定行的行开始而不是行号$phrase,请尝试以下操作。

more -1000 +/"$phrase" yourfilename | sed '1,4d'

-1000将连续列出最多1000行的文本;您可以根据需要更改此设置。该sed命令将截断输出的前4行,该行由插入more,包含一个空行,消息“ ... skipping”以及您预期的起始行之前的两行,它们是自动插入的。我猜这可能会因您的系统而异。


2

您可以将NR参数与awk命令一起使用:

cat <file> | awk '{if (NR>=7000) print}'

2
您可以在其他限制下使用此命令。作为示例:仅cat messages | awk '{if (NR>=7000 && NR <7003) print}'显示7000、7001和7002行。
Gefolge

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.