Подтвердить что ты не робот

Что противоположно голове? Я хочу все, кроме первых N строк файла

Учитывая текстовый файл неизвестной длины, как я могу читать, например, все, кроме первых двух строк файла? Я знаю, что tail даст мне последние N строк, но я не знаю, что N впереди времени.

Итак, для файла

AAAA
BBBB
CCCC
DDDD
EEEE

Я хочу

CCCC
DDDD
EEEE

И для файла

AAAA
BBBB
CCCC

Я бы просто

CCCC
4b9b3361

Ответ 1

tail --help дает следующее:

  -n, --lines=K            output the last K lines, instead of the last 10;
                           or use -n +K to output lines starting with the Kth

Итак, чтобы отфильтровать первые строки 2, -n +3 должен предоставить вам результат, который вы ищете (начиная с 3-го).

Ответ 2

Предполагая, что ваша версия хвоста поддерживает его, вы можете указать начало хвоста после X строк. В вашем случае вы сделаете 2 + 1.

tail -n +3

[[email protected] ~]$ tail -n +3 stack_overflow.txt
CCCC
DDDD
EEEE

Ответ 3

Простое решение с использованием awk:

awk 'NR > 2 { print }' file.name

Ответ 4

Попробуйте sed 1,2d. При необходимости замените 2.

Ответ 5

tail -n +linecount filename начнет вывод в строке linecount filename, поэтому tail -n +3 filename должен делать то, что вы хотите.

Ответ 6

Используйте это, предположив, что первый образец называется sample1.dat, затем tail --lines=3 sample1.dat, который будет печатать все строки из третьей строки до последней строки.

Для второго образца снова предположим, что он называется sample2.dat, это будет tail --lines=-1 sample2.dat, который будет печатать последнюю строку...

Ответ 7

Я действительно не знаю, как это сделать только с хвостом или головой, но с помощью выражения wc -l (line count) и bash вы можете достичь этого.

tail -$(( $( wc -l $FILE | grep -Eo '[0-9]+' ) - 2 )) $FILE

Надеюсь, что это поможет.

Ответ 8

используя awk, чтобы получить все, кроме последних 2 строк

awk 'FNR==NR{n=FNR}FNR<=n-3{print}' file file

awk, чтобы получить все, кроме первых двух строк

awk 'NR>2' file

ИЛИ вы можете использовать больше

more +2 file

или просто bash

#!/bin/bash

i=0
while read -r line
do
  [[ $i > 1 ]] && echo "$line"
  ((i++))
done <"file"