Lớp lót này sẽ loại bỏ các dòng trùng lặp khỏi kiểu nhập văn bản mà không cần sắp xếp trước.
Ví dụ:
$ cat >f
q
w
e
w
r
$ awk '!a[$0]++' <f
q
w
e
r
$
Mã ban đầu tôi đã tìm thấy trên internets đọc:
awk '!_[$0]++'
Điều này thậm chí còn khó hiểu hơn đối với tôi khi tôi _
có ý nghĩa đặc biệt trong awk, như trong Perl, nhưng hóa ra đó chỉ là một tên của một mảng.
Bây giờ, tôi hiểu logic đằng sau một lớp lót: mỗi dòng đầu vào được sử dụng làm khóa trong một mảng băm, do đó, khi hoàn thành, hàm băm chứa các dòng duy nhất theo thứ tự đến.
Điều tôi muốn tìm hiểu là cách chính xác ký hiệu này được diễn giải bởi awk. Ví dụ: dấu hiệu bang ( !
) có nghĩa là gì và các yếu tố khác của đoạn mã này.
Làm thế nào nó hoạt động?