2012-04-27 29 views
11

Il /./ rimuove solo le righe vuote per la prima condizione { print "a"$0 }, come si garantisce che lo script rimuova le righe vuote per ogni condizione?AWK rimuovere le righe vuote

awk -F, '/./ { print "a"$0 } NR!=1 { print "b"$0 } { print "c"$0 } END { print "d"$0 }' MyFile 
+1

'awk '/./' MyFile'? 'awk NF' http://www.unix.com/shell-programming-scripting/84923-remove-all-blank-lines-shell-awk.html http://www.tek-tips.com/viewthread.cfm ? qid = 1282604 – ant

+0

Direi che è il momento di cambiare la risposta accettata, eccetto che penso che la risposta di @ oliv sia ancora migliore di quella con 25 upvotes, quindi voglio dargli il tempo di alzarmi. – Noumenon

risposta

1

Put seguente condizioni all'interno del primo, e verificare con if dichiarazioni, in questo modo:

awk -F, ' 
    /./ { 
     print "a"$0; 
     if (NR!=1) { print "b"$0 } 
     print "c"$0 
    } 
    END { print "d"$0 } 
' MyFile 
8

se si desidera ignorare tutte le righe vuote, mettere questo all'inizio dello script

/^$/ {next} 
25

Awk comando per rimuovere le righe vuote da un file:

awk 'NF > 0' filename 
12

Una forma più breve della risposta già proposto potrebbe essere la seguente:

awk NF file 

Qualsiasi awk sceneggiatura segue la sintassi condition {statement}. Se il blocco di istruzioni non è presente, awk stamperà l'intero record (riga) nel caso in cui lo condition non sia zero.

NF variabile in awk rappresenta il numero di campi nella riga. Pertanto, quando la riga non è vuota, NF contiene un valore positivo che attiva l'azione predefinita awk (stampa l'intera riga). In caso di linea vuota, NF è zero e la condizione non è soddisfatta, quindi awk non fa nulla.


o

awk '!/^$/' file 

^$ è l'espressione regolare per una linea vuota. È necessario 2 / per consentire a awk di capire che la stringa è un'espressione regolare. ! è la negazione standard.

+0

Come funziona? – user674669

+0

@ user674669 risposta aggiornata – oliv

+0

Grazie a @iv. Migliore risposta. – user674669

Problemi correlati