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 awk
biết dòng nào sẽ in. Biến $3
giữ 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 đó.
awk
Lệ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 space
hoặc Tab
giữ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 -F
tù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
-u
sẽ 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.