Tại sao uniq có thể bỏ qua các nhân vật hàng đầu nhưng không kết thúc các nhân vật? [đóng cửa]


7

Công cụ dòng lệnh do POSIX chỉ địnhuniq được thiết kế để "báo cáo hoặc lọc ra các dòng lặp lại trong một tệp." Ngoài các trường hợp sử dụng liên quan đến các dòng đầy đủ để so sánh, có hai tùy chọn để so sánh một phần dòng:

  • -f <number>bỏ qua các <number>trường đầu tiên và
  • -s <number>để bỏ qua các <number>ký tự đầu tiên (bắt đầu sau bất kỳ trường bị bỏ qua nào -f).

Điều tôi không hiểu là tại sao tính năng này không bao giờ được thêm vào uniqđể cho phép bỏ qua tất cả trừ các <number> trường đầu tiên .

Một thành ngữ Awk phổ biến là:

awk '!a[$1]++'

trong đó chỉ in các dòng chứa sự xuất hiện đầu tiên của trường đầu tiên của chúng.

Điều này dường như luôn luôn đối với tôi rất giống với chức năng của uniq.

Tất nhiên sẽ tốt cho các công cụ chồng lấp, nhưng có lý do nào dựa trên lịch sử hoặc triết học UNIX không bao gồm chức năng song song -f, chỉ xem xét các trường ____ đầu tiên không?


Tôi đang bỏ phiếu để đóng câu hỏi này dưới chủ đề vì nó hỏi một câu hỏi như tại sao lại là công cụ xyz? - vì vậy câu hỏi không thể trả lời được, hãy lưu ý rằng tác giả của công cụ đã quyết định theo cách này và không ai khác bận tâm thay đổi nó.
phản ứng

Câu trả lời:


4

Tôi không biết về các lý do dựa trên lịch sử hoặc triết học UNIX (nếu có) nhưng vài năm trước ai đó đã gửi yêu cầu tính năng (và bản vá) trong coreutilsdanh sách lỗi để thêm khả năng đó uniq. Cuối cùng nó đã bị từ chối:

rev | uniq -f | rev được coi là đủ

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.