Tôi muốn xóa một dòng nếu nó chứa giá trị được chỉ định.Xóa đường xóa có chứa dữ liệu
2 5 8
1 3 7
8 5 9
Vì vậy, nếu tôi muốn xóa một dòng chứa 7 như lĩnh vực thứ ba:
{
if($3 == 7){
####delete the line
}
}
Tôi muốn xóa một dòng nếu nó chứa giá trị được chỉ định.Xóa đường xóa có chứa dữ liệu
2 5 8
1 3 7
8 5 9
Vì vậy, nếu tôi muốn xóa một dòng chứa 7 như lĩnh vực thứ ba:
{
if($3 == 7){
####delete the line
}
}
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.
xóa một dòng chứa 7
awk '!/7/' yourFile
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.
Cú pháp này không hoạt động với tcsh. Cần phải trốn thoát! – ThomasMcLeod
Thoát '!' Không phải là giải pháp. Giải pháp là không sử dụng 'tcsh'! –