Was hat `uniq -t` gemacht?

15

Ich habe etwas alten Code von 2003, der -tWahl für uniqBefehl verwendet. Es wird ein Fehler ausgegeben, da diese Option wahrscheinlich nicht mehr unterstützt wird.

Hier ist das Stück, das den Befehl verwendet:

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

Was hat diese Option damals getan? Womit kann ich diesen Befehl ersetzen?

Babken Vardanyan
quelle
Hier ist die Quelle BTW: web.archive.org/web/20040217131820/http://www.team-teso.net/…
Babken Vardanyan
Laut man uniq, -f 1vermeidet das erste Feld zu vergleichen. Daraus würde ich schließen, -t ':'dass -tder Feldtrenner von Leerzeichen auf geändert werden soll :.
Martin von Wittich
Möglicherweise relevant: stackoverflow.com/questions/10546337/… War es vielleicht -teine Debian-spezifische Option, die später entfernt wurde?
Martin von Wittich
1
Möglicherweise relevant: bugs.debian.org/cgi-bin/bugreport.cgi?bug=117016
Martin von Wittich
1
Ich habe mich immer gefragt, warum uniqes nicht dasselbe gab -tund -kwie sort oder warum sort nicht alle Funktionen von uniqincorporated hatte (seitdem hat es jetzt -u). Diejenigen -w/ -f/ -svon GNU uniq keinen Sinn machen. Warum konnten sie nicht dieselbe Syntax verwenden wie sort.
Stéphane Chazelas

Antworten:

13

Der einzige Hinweis, den ich finden konnte, -tist in diesem Patch auf einer GNU-Mailingliste, die unter anderem folgende Hinweise enthält:

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

Dies war anscheinend eine GNU-Erweiterung, wurde aber nicht mehr verwendet. Es scheint die Auswahl eines Begrenzungszeichens für andere Felder als Leerzeichen oder Tabulatoren zu ermöglichen. Versuchen Sie zu ersetzen

uniq -t ':' -f 1 | \

mit

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

das durch :Leerzeichen ersetzt wird, die das Feldtrennzeichen von uniq erkennen.

casey
quelle
Ich würde fallen die gaus sed, da nur das erste Feld übersprungen. Mindestens ein Doppelpunkt ist erforderlich, damit die letzte Zeile funktioniert (hoffentlich nicht die erste). Trotzdem keine Garantie, dass es funktioniert (eines der ersten Felder kann Leerzeichen enthalten)
Graeme
@Graeme Guter Punkt, bearbeitet.
Casey
In Debian, Coreutils 5.2.1, wurde tatsächlich ein solcher Patch angewendet, und anscheinend wurde er in 5.93-1, dh im November 2005, entfernt.
user2719058
4

Angesichts des manEintrags für die -fOption:

-f, --skip-fields = N

         avoid comparing the first N fields

Ich denke, es ist ziemlich sicher anzunehmen, dass -tdas Feld Trennzeichen angibt (dies ist auch sortin der obigen Zeile der Fall ). Die Kombination der beiden Optionen bewirkt, dass uniqnur der Teil der Zeile nach dem ersten Doppelpunkt bearbeitet wird.

Graeme
quelle