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

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

Так и для файла

AAAA
BBBB
CCCC
DDDD
EEEE

Я хочу

CCCC
DDDD
EEEE

И для файла

AAAA
BBBB
CCCC

Я бы получил только

CCCC
117 голосов | спросил Nicholas M T Elliott 18 AM00000040000000831 2010, 04:20:08

7 ответов


0

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

ответил Joe Enos 18 AM00000040000003431 2010, 04:31:34
0

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

tail -n +3

[[email protected] ~]$ tail -n +3 stack_overflow.txt
CCCC
DDDD
EEEE
ответил Mike DeMaria 18 AM00000040000005331 2010, 04:31:53
0

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

awk 'NR > 2 { print }' file.name
ответил janm 18 AM00000040000000231 2010, 04:39:02
0

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

ответил Jim Lewis 18 AM00000040000004731 2010, 04:30:47
0

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

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

ответил t0mm13b 18 AM00000040000004531 2010, 04:30:45
0

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

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

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

ответил NawaMan 18 AM00000040000000331 2010, 04:33:03
0

используя 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"
ответил ghostdog74 18 AM00000040000004931 2010, 04:54:49

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

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132