2012-04-27 5 views
11

/./ chỉ xóa các dòng trống cho điều kiện đầu tiên { print "a"$0 }, làm cách nào để đảm bảo tập lệnh xóa các dòng trống cho mọi điều kiện?AWK xóa các dòng trống

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

Tôi có thể nói đã đến lúc thay đổi câu trả lời được chấp nhận, ngoại trừ tôi nghĩ câu trả lời của @ oliv thậm chí còn tốt hơn câu trả lời với 25 phiếu bầu vì vậy tôi muốn cho nó thời gian để tăng lên. – Noumenon

Trả lời

1

Đặt điều kiện bên trong một đầu tiên sau, và đánh dấu chúng với if báo cáo, như thế này:

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

nếu bạn muốn bỏ qua tất cả các dòng trống, đặt này vào lúc bắt đầu của kịch bản

/^$/ {next} 
25

AWK lệnh để loại bỏ các dòng trống từ một tập tin:

awk 'NF > 0' filename 
12

Một hình thức ngắn của câu trả lời đã được đề xuất có thể là như sau:

awk NF file 

Bất kỳ awk kịch bản sau cú pháp condition {statement}. Nếu không có khối câu lệnh, awk sẽ in toàn bộ bản ghi (dòng) trong trường hợp condition không bằng 0.

NF biến trong awk đại diện cho số trường trong dòng. Vì vậy, khi dòng không trống, NF giữ giá trị dương kích hoạt hành động awk mặc định (in toàn bộ dòng). Trong trường hợp dòng trống, NF bằng 0 và điều kiện không được đáp ứng, vì vậy awk sẽ không làm gì cả.


hoặc

awk '!/^$/' file 

^$ là regex cho một dòng trống. Cần có 2 / để cho phép awk hiểu chuỗi là regex. ! là từ phủ định chuẩn.

+0

Tính năng này hoạt động như thế nào? – user674669

+0

@ user674669 câu trả lời được cập nhật – oliv

+0

Cảm ơn @oliv. Câu trả lời hay nhất. – user674669