2012-04-27 2 views
11

Die /./ entfernt nur Leerzeilen für die erste Bedingung nur, wie würde ich sicherstellen, dass das Skript Leerzeilen für jede Bedingung entfernt?AWK Leerzeilen entfernen

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

Ich würde sagen, es ist Zeit, die angenommene Antwort zu ändern, außer dass ich denke, dass @ olivs Antwort sogar besser ist als die mit 25 Upvotes, also möchte ich ihr Zeit geben, aufzustehen. – Noumenon

Antwort

1

Put Bedingungen innerhalb der ersten nachfolgen und überprüfen sie mit if Aussagen, wie folgt aus:

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

, wenn Sie alle leeren Zeilen ignorieren möchten, setzen Sie diese am Anfang des Skripts

/^$/ {next} 
25

awk Leerzeilen aus einer Datei zu entfernen:

awk 'NF > 0' filename 
12

Eine kürzere Form der bereits vorgeschlagenen Antwort könnte die folgende sein:

awk NF file 

Jede awk Skript folgt die Syntax condition {statement}. Wenn der Anweisungsblock nicht vorhanden ist, wird awk den gesamten Datensatz (Zeile) drucken, falls condition nicht Null ist.

NF Variable in awk ist die Anzahl der Felder in der Zeile. Wenn also die Zeile nicht leer ist, enthält NF einen positiven Wert, der die Standardaktion awk auslöst (die gesamte Zeile wird gedruckt). Im Falle einer Leerzeile ist NF Null und die Bedingung ist nicht erfüllt, so dass awk nichts tut.


oder

awk '!/^$/' file 

^$ ist die regex für eine leere Zeile. Die 2 / wird benötigt, um awk verstehen die Zeichenfolge ist eine Regex. ! ist die Standard-Negation.

+0

Wie funktioniert das? – user674669

+0

@ user674669 Antwort aktualisiert – oliv

+0

Danke @oliv. Beste Antwort. – user674669