如何在unix中显示文件第n行的所有行

我想显示从第n行开始的所有行。 说,打印文件的第三行和所有下面的行,直到文件结束。 有这个命令吗?

Solutions Collecting From Web of "如何在unix中显示文件第n行的所有行"

你可以使用尾巴

摘自手册页:

-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行开始的文件内容

 sed -n '3,$p' file 

这只是填充文本,因为stackoverflow不喜欢简短的命令行。

打印,但删除第1到第2行:

 sed '1,2d' filename 

从第五行显示:

 awk 'NR>4' file 

你可以像这样使用awk

 awk 'BEGIN{n=5}NR<=n{next}1' file 
  • BEGIN{n=5} – 在文件处理开始之前,将n设置为跳过的行数(5)。
  • NR<=n{next} – 如果行号小于n则跳过处理。
  • 1 – 速print其他的一切。

awk命令可以通过只打印NR记录数为3或更多的行来完成:

 awk 'NR>=3' input_file_name 

如果需要,也可以使用变量将值传递给awk

 awk -vn=3 'NR>=n' input_file_name 

(也可以使用-vn=${num}来使用环境变量)。

还有很多其他的工具可以用来完成同样的工作, tailsedperl ,或者,因为这是一个编程问答网站,所以你可以自己编辑:

 #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' 

🙂