【发布时间】:2014-10-29 23:50:09
【问题描述】:
我想显示从第 n 行开始的所有行。比如说,打印文件的第三行和所有以下行,直到文件结束。有这个命令吗?
【问题讨论】:
我想显示从第 n 行开始的所有行。比如说,打印文件的第三行和所有以下行,直到文件结束。有这个命令吗?
【问题讨论】:
打印,但删除第 1 到 2 行:
sed '1,2d' filename
【讨论】:
你可以使用sed:
sed -n '3,$p' file
【讨论】:
你可以用尾巴
摘自手册页:
-n, --lines=K output the last K lines, instead of the last 10; or use -n +K to output lines starting with the Kth
例如
tail -n +10 file
从第 10 行开始输出文件内容
【讨论】:
tail 联机帮助页!
But there is a manpage that answers the OP's question. The tail manpage!。不,他的问题特别提到了Is there a command for that?,这清楚地表明他不知道相关的命令名是什么。
awk 命令可以通过仅将行打印到NR 记录号为三个或更多的行来做到这一点:
awk 'NR>=3' input_file_name
如果需要,您还可以使用变量将值传递给awk:
awk -v n=3 'NR>=n' input_file_name
(您也可以使用-v n=${num} 来使用环境变量)。
您可以使用许多其他工具来完成相同的工作,其中包括tail、sed 和perl,或者,因为这是一个编程问答网站,所以您自己动手吧:
#include <stdio.h>
int main (void) {
// Need character and # of newlines to skip.
int ch, newlines = 2;
// Loop until EOF or first lines skipped, exit on EOF.
while ((ch = getchar()) != EOF)
if ((ch == '\n') && (--newlines == 0))
break;
if (ch == EOF)
return 0;
// Now just echo all other characters, then return.
while ((ch = getchar()) != EOF)
putchar (ch);
return 0;
}
现在您通常不会为此编写自己的过滤器程序,但由于您要求最短的命令,您可以使用该源代码创建一个名为 x 的可执行文件来执行此操作:
x <input_file_name
你很难找到比这更短的命令。当然,假设您在 UNIXy 环境中(特别是 bash),您也可以:
alias x awk 'NR>=3'
:-)
【讨论】:
{print} 是隐含的,如果你不放任何东西,那么awk 'NR>=3' file 会做。
export 在这里没有用处。
你可以像这样使用awk:
awk 'BEGIN{n=5}NR<=n{next}1' file
BEGIN{n=5} - 在文件处理开始之前,将 n 设置为要跳过的行数 (5)。NR<=n{next} - 如果行号小于或等于 n,则跳过处理。1 - print 其他所有内容的简写。【讨论】:
awk 'NR>5' file,但既然已经建议了,我想补充一下awk,就像sed支持范围运算符一样。所以,awk 'NR==5,0' file 也可以。
从第 5 行开始显示:
awk 'NR>4' file
【讨论】: