Что противоположно голове? Я хочу все, кроме первых N строк файла
Учитывая текстовый файл неизвестной длины, как я могу читать, например, все, кроме первых двух строк файла? Я знаю, что tail
даст мне последние N строк, но я не знаю, что N впереди времени.
Итак, для файла
AAAA
BBBB
CCCC
DDDD
EEEE
Я хочу
CCCC
DDDD
EEEE
И для файла
AAAA
BBBB
CCCC
Я бы просто
CCCC
Ответы
Ответ 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"