O que o `uniq -t` fez?

15

Eu tenho algum código antigo de 2003, que usa a -topção de uniqcomando. Ele gera um erro, já que essa opção provavelmente não é mais suportada.

Aqui está a peça que usa o comando:

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

O que essa opção fez naquela época? Com o que posso substituir esse comando?

Babken Vardanyan
fonte
Aqui está a fonte BTW: web.archive.org/web/20040217131820/http://www.team-teso.net/…
Babken Vardanyan
Segundo man uniq, -f 1evita-se comparar o primeiro campo. Eu deduziria -t ':'que isso -tdeveria mudar o separador de campo de espaços em branco para :.
Martin von Wittich
Possivelmente relevante: stackoverflow.com/questions/10546337/… Talvez tenha -tsido uma opção específica do Debian que foi removida posteriormente?
Martin von Wittich
1
Possivelmente relevante: bugs.debian.org/cgi-bin/bugreport.cgi?bug=117016
Martin von Wittich
1
Eu sempre me perguntei por uniqque não tinha o mesmo -te -kcomo classificar ou por que classificar não tinha todos os recursos do uniqincorporado (como agora tem -u). Aqueles -w/ -f/ -sdo GNU uniq não fazem sentido. Por que eles não podiam usar a mesma sintaxe que sort.
Stéphane Chazelas

Respostas:

13

A única referência que eu pude encontrar -té neste patch em uma lista de discussão GNU, que contém, entre outras dicas, esta:

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

Aparentemente, essa era uma extensão GNU, mas não estava mais em uso. Parece permitir a seleção de um caractere delimitante para outros campos que não sejam espaços ou tabulações. Tente substituir

uniq -t ':' -f 1 | \

com

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

que será substituído :por espaços que o uniq reconheça o separador de campos.

Casey
fonte
Eu soltaria o gfrom sed, já que apenas o primeiro campo é ignorado. É necessário pelo menos um cólon para que a última linha funcione (espero que não a primeira). Ainda não há garantia de que vai funcionar embora (qualquer um dos primeiros campos podem conter espaços em branco)
Graeme
@ Graeme Bom ponto, editado.
Casey
No Debian, coreutils 5.2.1 facto, tinha um tal adesivo aplicado, e, aparentemente, isso foi removido in 5,93-1, que é, em Novembro de 2005.
user2719058
4

Dada a manentrada para a -fopção:

-f, --skip-fields = N

         avoid comparing the first N fields

Eu acho que é bastante seguro supor que -tespecifique o separador de campos (esse também é o caso sortna linha acima). A combinação das duas opções faria uniqoperar apenas na parte da linha após o primeiro dois pontos.

Graeme
fonte