2012-04-27 20 views
11

tylko /./ usuwa puste wiersze tylko dla pierwszego warunku { print "a"$0 }, w jaki sposób zapewnić skrypt usuwa puste wiersze dla każdego warunku?AWK usunąć puste wiersze

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

Powiedziałbym, że nadszedł czas, aby zmienić zaakceptowaną odpowiedź, z tym wyjątkiem, że myślę, że odpowiedź @ oliv jest nawet lepsza niż ta z 25 przegranych, więc chcę dać jej czas na awans. – Noumenon

Odpowiedz

1

Put następujące warunki wewnątrz pierwszej, i sprawdzić je z if sprawozdania, podobnie jak to:

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

jeśli chcesz ignorować wszystkie puste wiersze, umieścić to na początku skryptu

/^$/ {next} 
25

awk polecenia, aby usunąć puste wiersze z pliku:

awk 'NF > 0' filename 
12

Krótsza forma już proponowanego odpowiedź może być następująca:

awk NF file 

Wszelkie awk skrypt następująco składnię condition {statement}. Jeśli blok instrukcji nie jest obecny, awk wydrukuje cały rekord (wiersz) w przypadku, gdy condition nie jest zero.

NF zmienna w awk reprezentuje liczbę pól w linii. Jeśli linia nie jest pusta, NF ma wartość dodatnią, która uruchamia domyślną akcję awk (wydrukuj całą linię). W przypadku pustej linii NF wynosi zero, a warunek nie jest spełniony, więc awk nic nie robi.


lub

awk '!/^$/' file 

^$ jest regex pustej linii. 2 / jest potrzebny, aby umożliwić awk zrozumienie, że ciąg jest wyrażeniem regularnym. ! to standardowa negacja.

+0

Jak to działa? – user674669

+0

@ user674669 answer updated – oliv

+0

Dzięki @oliv. Najlepsza odpowiedź. – user674669