¿Qué hizo `uniq -t`?

15

Tengo un código antiguo de 2003 que usa la -topción de uniqcomando. Lanza un error ya que esa opción probablemente ya no sea compatible.

Aquí está la pieza que usa el 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

¿Qué hizo esa opción en ese entonces? ¿Con qué puedo sustituir ese comando?

Babken Vardanyan
fuente
Aquí está la fuente BTW: web.archive.org/web/20040217131820/http://www.team-teso.net/…
Babken Vardanyan
Según man uniq, -f 1evita comparar el primer campo. Supongo -t ':'que -tse supone que eso cambiará el separador de campo de espacios en blanco a :.
Martin von Wittich
Posiblemente relevante: stackoverflow.com/questions/10546337/… ¿ Tal vez -tfue una opción específica de Debian que luego se eliminó?
Martin von Wittich
1
Posiblemente relevante: bugs.debian.org/cgi-bin/bugreport.cgi?bug=117016
Martin von Wittich
1
Siempre me pregunté por qué uniqno tenía lo mismo -ty -kcomo sort o por qué sort no tenía todas las características de uniqincorporado (ya que ahora tiene -u). Esos -w/ -f/ -sde GNU uniq no tienen sentido. ¿Por qué no podrían usar la misma sintaxis que sort.
Stéphane Chazelas 01 de

Respuestas:

13

La única referencia que pude encontrar -tes en este parche en una lista de correo GNU, que contiene entre otras pistas, esto:

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

Esto aparentemente era una extensión de GNU pero ya no estaba en uso. Parece permitir seleccionar un carácter delimitador para campos que no sean espacios o pestañas. Intenta reemplazar

uniq -t ':' -f 1 | \

con

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

que reemplazará :con espacios que uniq reconoce el separador de campo.

casey
fuente
Quitaría el gde sed, ya que solo se omite el primer campo. Se necesita al menos un colon para que funcione la última línea (con suerte no la primera). Sin embargo, todavía no hay garantía de que funcione (cualquiera de los primeros campos puede contener espacios en blanco)
Graeme
@Graeme Buen punto, editado.
casey
En Debian, coreutils 5.2.1 realmente tenía un parche aplicado, y aparentemente se eliminó en 5.93-1, es decir, en noviembre de 2005.
user2719058
4

Dada la manentrada para la -fopción:

-f, --skip-fields = N

         avoid comparing the first N fields

Creo que es bastante seguro suponer que -tespecifica el separador de campo (este también es el caso sorten la línea anterior). La combinación de las dos opciones uniqsolo haría funcionar la parte de la línea que sigue al primer colon.

Graeme
fuente