Как отобразить все строки из n-й строки файла в unix

Я хочу отобразить все строки, начиная с n-й строки. Скажем, напечатайте третью строку файла и все следующие строки до конца файла. Есть ли команда для этого?

Ответы

Ответ 1

вы можете использовать хвост

выдержка из man-страницы:

   -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-й строки

Ответ 2

sed -n '3,$p' file

Это только текст наполнителя, потому что stackoverflow не оценивает короткие командные строки.

Ответ 3

Распечатайте, но удалите строки с 1 по 2:

sed '1,2d' filename

Ответ 4

Чтобы отобразить из 5-й строки:

awk 'NR>4' file

Ответ 5

Вы можете использовать awk следующим образом:

awk 'BEGIN{n=5}NR<=n{next}1' file
  • BEGIN{n=5} - перед началом обработки файлов устанавливает n количество строк для пропуска (5).
  • NR<=n{next} - пропускает обработку, если номер строки меньше n.
  • 1 - сокращение для print всего остального.

Ответ 6

Команда awk может делать это только с помощью строк печати, номер записи NR - три или более:

awk 'NR>=3' input_file_name

Вы также можете передать значение в awk с помощью переменной, если необходимо:

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

(и вы можете использовать -v n=${num} для использования переменной среды).

Есть много других инструментов, которые вы можете использовать для выполнения одной и той же работы, tail, sed и perl среди них, или, так как это сайт программирования Q & A, просто сканируйте свой собственный:

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

: -)