Gatto Unix a partire dalla linea


40

Qual è il modo migliore per produrre da un file partendo da una riga specifica (grande numero come 70000). Qualcosa di simile a:

cat --line=70000 <file>

Risposte:


60

Dai un'occhiata alla coda, più precisamente, è --lines = + N switch:

tail --lines=+100 <file>

Wow. Non lo sapevo nemmeno dopo averlo usato su Linux per 8 anni! Ho sempre usato un bash fn! Grazie ! getFromLine () {lineno = wc -l $1 | awk '{print $1}'; lineno = expr $lineno - $2; tail -n $ lineno $ 1; }
secureBadshah,

2
Come nota, questo non funziona su Mountain Lion (Darwin Kernel Versione 13.1.0). La variante per Mountain Lion ètail -n
Kaushik Ghose,

22

Il modo più ovvio è tail. La sintassi potrebbe essere leggermente diversa a seconda del sistema operativo in uso:

tail -n +70000

Se non riesci a metterti tailal lavoro, potresti usarlo sed, ma potrebbe finire più lentamente:

sed -pe '1,69999d'

tailha funzionato bene in MinGW (su un file di testo da 600 MB). Il runtime è durato solo pochi secondi (ma il file di input avrebbe potuto essere già nella cache dei file).
Peter Mortensen,

2

Se invece di un numero di riga devi iniziare a elencare sulla riga contenente un dato $phrase, prova quanto segue.

more -1000 +/"$phrase" yourfilename | sed '1,4d'

-1000 elencherà continuamente il testo per un massimo di 1000 righe; puoi cambiarlo se necessario. Il sedcomando taglierà le prime 4 righe di output, che sono state inserite automaticamente da more, contenente una riga vuota, il messaggio "... skipping" e le due righe che precedono la linea di partenza prevista. Immagino che questo possa variare a seconda del tuo sistema.


2

È possibile utilizzare il parametro NR con il comando awk :

cat <file> | awk '{if (NR>=7000) print}'

2
È possibile utilizzare questo comando con altri limiti. Come esempio: cat messages | awk '{if (NR>=7000 && NR <7003) print}'mostra solo le righe 7000, 7001 e 7002.
Gefolge,

-1

2
link affascinante, ma in realtà non fornisce alcuna informazione applicabile a questa domanda e il tuo tailsuggerimento è lo stesso delle risposte accettate e di altre di settimane fa. perché preoccuparsi di pubblicare?
Quack Quixote,

Il collegamento è interrotto -...can't find the server at www.scripterworld.com.
Peter Mortensen il
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.