Как отобразить все строки из 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'
: -)