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

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

Так что для файла

AAAA
BBBB
CCCC
DDDD
EEEE

я хочу

CCCC
DDDD
EEEE

И для файла

AAAA
BBBB
CCCC

Я бы просто получил

CCCC
130
задан Adrian Heine 22 April 2015 в 20:21
поделиться

8 ответов

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-го).

195
ответ дан 24 November 2019 в 00:24
поделиться

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

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

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

0
ответ дан 24 November 2019 в 00:24
поделиться

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

tail -n +3

[mdemaria@oblivion ~]$ tail -n +3 stack_overflow.txt
CCCC
DDDD
EEEE
21
ответ дан 24 November 2019 в 00:24
поделиться

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

6
ответ дан 24 November 2019 в 00:24
поделиться

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

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

0
ответ дан 24 November 2019 в 00:24
поделиться

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

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

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

awk 'NR>2' file

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

more +2 file

или просто bash

#!/bin/bash

i=0
while read -r line
do
  [[ $i > 1 ]] && echo "$line"
  ((i++))
done <"file"
-1
ответ дан 24 November 2019 в 00:24
поделиться

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

awk 'NR > 2 { print }' file.name
12
ответ дан 24 November 2019 в 00:24
поделиться

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

7
ответ дан 24 November 2019 в 00:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: