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

时间:2014-09-05 05:00:01

标签: linux bash unix sh

我想显示从第n行开始的所有行。比如说,打印文件的第三行和所有以下行直到文件结束。是否有命令?

6 个答案:

答案 0 :(得分:52)

你可以使用尾巴

摘自该联机帮助页:

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

答案 1 :(得分:10)

从第5行开始:

awk 'NR>4' file

答案 2 :(得分:9)

sed -n '3,$p' file

这只是填充文本,因为stackoverflow并不了解短命令行。

答案 3 :(得分:5)

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

sed '1,2d' filename

答案 4 :(得分:5)

您可以像这样使用awk

awk 'BEGIN{n=5}NR<=n{next}1' file
  • BEGIN{n=5} - 在文件处理开始之前,将n设置为要跳过的行数(5)。
  • NR<=n{next} - 如果行号小于或等于n,则跳过处理。
  • 1 - print其他所有内容的简写。

答案 5 :(得分:2)

awk命令只能通过打印NR记录号为3或更多的行来执行此操作:

awk 'NR>=3' input_file_name

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

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

(您也可以使用-v n=${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'

: - )