2011-10-27 39 views

Trả lời

15

Nó nên là đủ để nói

 
$ awk '$3 != 7' 

Lưu ý rằng đây là một sự so sánh số, và sẽ bỏ qua các dòng trong đó trường thứ ba là, ví dụ: "0.7e1", nhưng nó sẽ hoạt động đối với dữ liệu mẫu bạn cung cấp.

8

xóa một dòng chứa 7

awk '!/7/' yourFile 
+0

Cú pháp này không hoạt động với tcsh. Cần phải trốn thoát! – ThomasMcLeod

+6

Thoát '!' Không phải là giải pháp. Giải pháp là không sử dụng 'tcsh'! –

6

Những câu trả lời khác làm việc. Đây là lý do tại sao

Mô hình xử lý chuẩn của Awk là đọc một dòng đầu vào, tùy chọn phù hợp với dòng đó và nếu khớp (tùy chọn) in đầu vào. Các giải pháp khác sử dụng kết quả phủ định, vì vậy các dòng được in trừ khi khớp được thực hiện.

Mẫu mã của bạn không sử dụng đối sánh phủ định: nó cho biết "nếu có điều gì đó đúng, hãy thực hiện". Vì bạn muốn xóa đầu vào, khi bạn so khớp mục tiêu đó, bạn có thể bỏ qua việc in nó.

{ 
    if($3 == 7){ 
    #skip printing this line 
    next 
    } 
} 

IHTH.

+0

Thao tác này không hoạt động trừ khi bạn thêm câu lệnh 'else' có nội dung' print' vào đó. – Masster

+0

Câu hỏi là "Vì vậy, nếu tôi muốn xóa một dòng có chứa 7 là trường thứ ba:". Tôi nghĩ rằng tôi đã trả lời câu hỏi đó. Cảm ơn bạn đã quan tâm! :-) – shellter

Các vấn đề liên quan