Chỉ cần thay đổi lệnh awk của bạn thành cột bạn muốn thực hiện để xóa các dòng trùng lặp dựa trên (trong trường hợp cột thứ ba của bạn):
awk '!seen[$3]++' filename
Lệnh này cho awkbiết dòng nào sẽ in. Biến $3giữ toàn bộ nội dung của cột 3 và dấu ngoặc vuông là truy cập mảng. Vì vậy, đối với mỗi cột thứ ba của tên tệp, nút của mảng có tên seenđược tăng lên và dòng được in nếu nội dung của nút đó (cột 3) không được !đặt trước đó.
awkLệnh trên sẽ hoạt động nếu các cột của bạn trong tệp đầu vào được phân tách bằng spacehoặc Tabgiữa chúng, nếu các cột được phân cách bằng một cái gì đó khác, bạn cần yêu cầu nó hiển thị với -Ftùy chọn của nó . Vì vậy, ví dụ nếu tất cả các cột được phân cách bằng dấu phẩy ( ,) và muốn xóa các dòng dựa trên -F','tùy chọn sử dụng cột thứ ba .
awk -F',' '!seen[$3]++' filename
-usẽ chỉ xóa các dòng trùng lặp , không phải các khóa trùng lặp ... nhưng tôi đã sai.