2010-08-18 13 views

risposta

149

tail --help ha pronunciato la seguente:

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

Quindi, per filtrare le prime linee 2, -n +3 dovrebbe darvi l'uscita che si sta cercando (a partire da 3 °).

+2

Stranamente, la mia pagina man non elenca l'opzione, ma funziona bene - grazie! –

+0

@Nicholas: Strano, ho pensato che sarebbe una documentazione standard indipendentemente dal sistema operativo. L'ho estratto da Cygwin in Windows, quindi non so come appare in diverse distribuzioni Linux. Sono contento che ha funzionato. –

+0

@NicholasMTElliott [man7] (http://man7.org/linux/man-pages/man1/tail.1.html) lo elenca come la manpage di Joe Enos, quindi è probabile che sia un problema di versione manpage –

0

Utilizzare questo, supponendo che il primo campione sia denominato sample1.dat e quindi tail --lines=3 sample1.dat che stamperebbe tutte le righe dalla 3a riga all'ultima riga.

Per il secondo campione, di nuovo supponiamo si chiama sample2.dat sarebbe tail --lines=-1 sample2.dat che stampare l'ultima riga ...

+0

Ma Nicholas non sa N in anticipo .... –

+0

@Jim: qual è la differenza con la tua e la mia? .... stessa cosa ....: o mi riferivo ai due file di dati di esempio input come per la sua domanda e mostrando come ottenere ciò che stava cercando .... – t0mm13b

+0

Ok ... allora perché ha chiesto il secondo campione e ha mostrato il risultato che voleva, che è quello che ho usato 'coda --lines = - 1 '...... ovviamente puoi omettere completamente il nome del file e può ancora funzionare come una pipa ... hmm – t0mm13b

4

tail -n +linecount filename inizierà uscita alla linea di linecountfilename, così tail -n +3 filename dovrebbe fare ciò che tu vuoi.

+0

Questo non funzionerebbe nella mia shell, ma sarebbe "tail -n +17 filename". Io uso bash/ubuntu LTS – isomorphismes

+1

@iso: Grazie per l'heads-up - le versioni precedenti di 'tail' hanno accettato la sintassi che ho usato nella mia risposta originale, ma ora è necessario usare l'opzione' -n' esplicita. Ho aggiornato la mia risposta di conseguenza. –

15

Supponendo che la tua versione di coda lo supporti, è possibile specificare l'avvio della coda dopo le linee X. Nel tuo caso, faresti 2 + 1.

tail -n +3 

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

io davvero non so come fare da solo la coda o la testa, ma con l'aiuto di wc -l (conteggio line) e l'espressione bash, è possibile raggiungere questo obiettivo.

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

Spero che questo aiuti.

+1

Ciò richiede un passaggio completo sul file prima di eseguire tail. Se il file è maggiore della dimensione della memoria, questo sarà molto inefficiente. Non gestisce file di meno di due righe. Non gestisce la dimensione del file che cambia tra il wc e la coda. – janm

+2

@janm: Stai bene. Altre risposte sono solo migliori. Mi sento in imbarazzo. :-p – NawaMan

11

Una soluzione semplice utilizzando awk:

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

Uno di noi è confuso. Le domande dicono: "tutte tranne le prime 2 righe del file". In che modo questo comando non soddisfa il requisito? – janm

+4

'{print}' è l'azione predefinita e può essere omessa. – tripleee

-1

utilizzando awk per ottenere tutti tranne l'ultimo 2 linea

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

awk per ottenere tutte ma le prime 2 righe

awk 'NR>2' file 

O puoi usare di più

more +2 file 

o semplicemente bash

#!/bin/bash 

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

Ora questo non soddisfa i requisiti. La domanda dice "tutte tranne le prime 2 righe del file" e fornisce due esempi, ciascuno con un singolo file, in cui le prime due righe vengono saltate e il resto del file viene inviato a stdout. Questo non è ciò che questo comando fa. – janm

+0

sì ho errato la domanda. pensavo che gli chiedessero tutte le ultime 2 righe. – ghostdog74

7

Prova sed 1,2d. Sostituisci 2 secondo necessità.

+0

ha funzionato come previsto .. come numero di righe dopo le prime 2 righe sono sconosciute. – kumarprd

Problemi correlati