`Uniq -t` đã làm gì?


15

Tôi có một số mã cũ từ năm 2003 sử dụng -ttùy chọn cho uniqlệnh. Nó đưa ra một lỗi vì tùy chọn đó có thể không được hỗ trợ nữa.

Đây là phần sử dụng lệnh:

egrep -n "{ IA32_OP" ia32-decode.c | \
    awk '{ print $1 $3 $4 }' | \
    sort -t '(' +1 | \
    uniq -t ':' -f 1 | \
    sed 's/\(.*\)\:IA32_OP(\(.*\)),/#define IA32_OP_\2 \1/g' >> ia32_opcodes.h

Lựa chọn đó đã làm gì khi đó? Tôi có thể thay thế lệnh đó bằng gì?



Theo man uniq, -f 1tránh so sánh lĩnh vực đầu tiên. Tôi đã suy luận từ -t ':'đó -tcó nghĩa vụ phải thay đổi bộ tách trường từ khoảng trống sang :.
Martin von Wittich

Có thể có liên quan: stackoverflow.com/questions/10546337/ Có thể -tlà một tùy chọn dành riêng cho Debian mà sau đó đã bị xóa?
Martin von Wittich


1
Tôi luôn tự hỏi tại sao uniqkhông có sự giống nhau -t-kgiống như hoặc tại sao sắp xếp không có tất cả các tính năng uniqkết hợp (vì bây giờ nó đã có -u). Những -w/ -f/ -stừ GNU uniq không có ý nghĩa. Tại sao họ không thể sử dụng cú pháp giống như sort.
Stéphane Chazelas

Câu trả lời:


13

Tài liệu tham khảo duy nhất tôi có thể tìm thấy -tlà trong bản vá này trong danh sách gửi thư GNU, trong đó có các đầu mối khác, đây:

+  -t, --separator=S     use a character in string S as field separator\n\

Đây rõ ràng là một phần mở rộng GNU nhưng không còn được sử dụng. Nó xuất hiện để cho phép chọn một ký tự phân cách cho các trường không phải là khoảng trắng hoặc tab. Hãy thử thay thế

uniq -t ':' -f 1 | \

với

sed 's/:/ /' | \
uniq -f 1 | \

cái sẽ thay thế :bằng khoảng trắng mà uniq nhận ra dấu phân cách trường.


Tôi sẽ bỏ gtừ sed, vì chỉ có trường đầu tiên được bỏ qua. Ít nhất một dấu hai chấm là cần thiết cho dòng cuối cùng hoạt động (hy vọng không phải là đầu tiên). Vẫn không có gì đảm bảo nó sẽ hoạt động mặc dù (bất kỳ trường nào trong số các trường đầu tiên có thể chứa khoảng trắng)
Graeme

@Graeme Điểm tốt, chỉnh sửa.
casey

Trong Debian, coreutils 5.2.1 thực sự đã áp dụng một bản vá như vậy và dường như nó đã bị xóa trong 5.93-1, tức là vào tháng 11 năm 2005.
user2719058 2/214

4

Đưa ra manmục nhập cho -ftùy chọn:

-f, --skip-field = N

         avoid comparing the first N fields

Tôi nghĩ rằng khá an toàn khi giả định rằng -tchỉ định dấu phân cách trường (đây cũng là trường hợp sorttrong dòng trên). Sự kết hợp của hai tùy chọn sẽ uniqchỉ hoạt động trên một phần của dòng sau dấu hai chấm đầu tiên.

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.