Salta le prime 6 righe / righe in un file di testo con awk


39

Come posso saltare le prime 6 righe / righe in un file di testo (input.txt) ed elaborare il resto con awk? Il formato del mio script awk (program.awk) è:

BEGIN {
} 

{ 
process here
} 

END {

}

Il mio file di testo è così:

0
3
5
0.1 4.3
2.0 1.5
1.5 3.0
0.3 3.3
1.5 2.1
.
.
.

Voglio elaborare il file a partire da:

0.3 3.3
1.5 2.1
.
.
.

Risposte:


60

Utilizzare uno dei due modelli:

NR>6 { this_code_is_active }

o questo:

NR<=6 { next }
{ this_code_is_active }

Usa FNR invece di NR se hai molti file come argomenti per awk e vuoi saltare 6 righe in ogni file.


29

Provare:

awk 'FNR > 6 { #process here }' file

4
Buono! Ma non hai spiegato perché questo è meglio - per più file FNRè il numero di riga in ciascun file, mentre NRè il numero nell'intero input (non è un problema durante il piping).
Tomasz Gandor,

3

È inoltre possibile saltare un numero arbitrario di righe all'inizio o alla fine del file utilizzando heado tailprogrammi.

Per la tua domanda concreta,

tail input.txt -n+7 | program.awk

lo farà, a condizione che il program.awkfile sia eseguibile. Altrimenti, puoi usare

tail input.txt -n+7 | awk -f program.awk

In questo modo risparmierai un confronto per ogni riga e non dovrai cambiare la logica del tuo codice AWK.

tail inizierà lo streaming del testo a partire dalla settima riga, saltando le sei prime righe.

Questo non sarà un grosso problema in termini di prestazioni, specialmente se il processo di testo è semplice grazie alla memorizzazione nella cache. Tuttavia, per file lunghi e un uso ripetuto nell'ambiente cloud è possibile risparmiare alcuni costi.


Corretto, ma come regola generale, si dovrebbe evitare le tubazioni quando è possibile farlo facilmente con un solo strumento. Pensa a un enorme file di testo che attraversa entrambi i comandi solo per rimuovere alcune righe.
Philippos,
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.