2012-07-27 15 views
23

Kết quả của kịch bản của tôi được phân định tab sử dụng awk như:AWK để bỏ qua các dòng trống

awk -v variable=$bashvariable '{print variable"\t single\t" $0"\t double"}' myinfile.c 

Lệnh awk được chạy trong một vòng lặp trong khi đó cập nhật các giá trị biến và tập tin myinfile.c cho mỗi chu kỳ. Tôi nhận được kết quả mong đợi với lệnh này. Nhưng nếu inmyfile.c chứa một dòng trống (nó có thể chứa) nó in không có thông tin liên quan. tôi có thể yêu cầu awk bỏ qua dòng trống không?

Tôi biết nó có thể được thực hiện bằng cách loại bỏ các dòng trống từ myinfile.c trước khi chuyển nó vào awk. Tôi có kiến ​​thức về sedtr cách nhưng tôi muốn awk làm điều đó trong chính lệnh được đề cập ở trên và không phải là giải pháp riêng biệt như dưới đây hoặc đường ống.

sed '/^$/d' myinfile.c 
tr -s "\n" < myinfile.c 

Cảm ơn trước cho các đề xuất và trả lời của bạn.

Trả lời

38

Có hai phương pháp bạn có thể thử để lọc ra các dòng:

awk 'NF' data.txt 

awk 'length' data.txt 

Chỉ cần đặt những lúc bắt đầu lệnh của bạn, ví dụ:

awk -v variable=$bashvariable 'NF { print variable ... }' myinfile 

hoặc

awk -v variable=$bashvariable 'length { print variable ... }' myinfile 

Cả hai điều này đóng vai trò là người gác cổng/câu lệnh.

Cách tiếp cận đầu tiên hoạt động bằng cách chỉ in ra các dòng có số trường (NF) không phải là số không (nghĩa là, lớn hơn 0).

Phương pháp thứ hai nhìn vào chiều dài dòng và hành động nếu chiều dài không phải là zero (tức là lớn hơn zero)

Bạn có thể chọn phương pháp phù hợp nhất cho dữ liệu của bạn/nhu cầu.

2

có thể bạn có thể thử này ra:

awk -v variable=$bashvariable '$0{print variable"\t single\t" $0"\t double"}' myinfile.c 
1

Hãy thử điều này:

awk -v variable=$bashvariable '/^.+$/{print variable"\t single\t" $0"\t double"}' myinfile.c 
8

Bạn chỉ có thể thêm

/^\s*$/ {next;} 

Để phía trước kịch bản của bạn mà sẽ phù hợp với các dòng trống và bỏ qua phần còn lại của các quy tắc phù hợp. Đặt tất cả lại với nhau:

awk -v variable=$bashvariable '/^\s*$/ {next;} {print variable"\t single\t" $0"\t double"}' myinfile.c