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?



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
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.


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.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.