2011-10-27 8 views
8

Desidero eliminare una riga se contiene un valore specificato.Awk elimina riga contenente dati

2 5 8 
1 3 7 
8 5 9 

Quindi, se ho voluto per eliminare una riga contenente 7 come il terzo campo:

{ 
if($3 == 7){ 
####delete the line 
} 
} 

risposta

15

Dovrebbe essere sufficiente dire

 
$ awk '$3 != 7' 

Si noti che questo è un confronto numerico, e ometterà le righe in cui il terzo campo è, ad esempio, "0.7e1", ma funzionerà per i dati di esempio forniti.

8

eliminare una riga contenente 7

awk '!/7/' yourFile 
+0

Questa sintassi non funziona con tcsh. Hai bisogno di scappare! – ThomasMcLeod

+6

Escaping '!' Non è la soluzione. La soluzione è non usare 'tcsh'! –

6

Le altre risposte funzionano. Ecco perché

Il modello di elaborazione standard di Awk consiste nel leggere una riga di input, opzionalmente corrispondere a quella linea e, se necessario, stampare (in via opzionale) l'input. Le altre soluzioni utilizzano una corrispondenza di negazione, pertanto le righe vengono stampate a meno che non venga effettuata la corrispondenza con lo.

L'esempio di codice non utilizza una corrispondenza di negazione: dice "se qualcosa è vero, fallo". Poiché vuoi eliminare l'input, quando abbini quel target, puoi semplicemente saltare la stampa.

{ 
    if($3 == 7){ 
    #skip printing this line 
    next 
    } 
} 

IHTH.

+0

Questo non funziona a meno che non si aggiunga un'istruzione 'else' che dice' print' in essa. – Masster

+0

La domanda era "Quindi se volevo eliminare una riga contenente 7 come terzo campo:". Penso di aver risposto a questa domanda. Grazie per la tua preoccupazione! :-) – shellter