Cosa ha fatto `uniq -t`?


15

Ho del vecchio codice del 2003 che utilizza l' -topzione per il uniqcomando. Genera un errore poiché tale opzione probabilmente non è più supportata.

Ecco il pezzo che utilizza il 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

Cosa ha fatto quell'opzione allora? Con cosa posso sostituire quel comando?



Secondo man uniq, -f 1evita di confrontare il primo campo. Ne deduco -t ':'che -tdovrebbe cambiare il separatore di campo da spazi vuoti a :.
Martin von Wittich,

Forse pertinente: stackoverflow.com/questions/10546337/… Forse -tun'opzione specifica di Debian è stata successivamente rimossa?
Martin von Wittich,


1
Mi sono sempre chiesto perché uniqnon avesse lo stesso -te -kcome ordinamento o perché ordinamento non avesse tutte le funzionalità di uniqincorporate (dal momento che ora ha -u). Quelli -w/ -f/ -sda GNU uniq non hanno senso. Perché non potevano usare la stessa sintassi di sort.
Stéphane Chazelas,

Risposte:


13

L'unico riferimento che ho potuto trovare -tè in questa patch su una mailing list GNU, che contiene tra gli altri indizi, questo:

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

Questa apparentemente era un'estensione GNU ma non è più in uso. Sembra consentire la selezione di un carattere delimitante per campi diversi da spazi o tabulazioni. Prova a sostituire

uniq -t ':' -f 1 | \

con

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

che sostituirà :con spazi che uniq riconosce il separatore di campo.


Vorrei rilasciare il gda sed, poiché viene saltato solo il primo campo. È necessario almeno un punto per far funzionare l'ultima linea (si spera non la prima). Ancora nessuna garanzia funzionerà comunque (uno dei primi campi può contenere spazi bianchi)
Graeme,

@Graeme Buon punto, modificato.
Casey,

In Debian, a coreutils 5.2.1 era effettivamente applicata una tale patch, e apparentemente è stata rimossa in 5.93-1, cioè nel novembre 2005.
user2719058

4

Data la manvoce per l' -fopzione:

-f, --skip-fields = N

         avoid comparing the first N fields

Penso che sia abbastanza sicuro supporre che -tspecifica il separatore di campo (questo è anche il caso disort nella riga sopra). La combinazione delle due opzioni farebbe uniqfunzionare solo sulla parte della linea che segue i primi due punti.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.