Das von POSIX angegebene Befehlszeilentooluniq
dient zum "Melden oder Herausfiltern wiederholter Zeilen in einer Datei". Abgesehen von Anwendungsfällen, bei denen die vollständigen Zeilen zum Vergleich verwendet werden, gibt es zwei Optionen für den teilweisen Zeilenvergleich:
-f <number>
die ersten<number>
Felder zu ignorieren , und-s <number>
um die ersten<number>
Zeichen zu ignorieren (beginnend nach ignorierten Feldern von-f
).
Was ich nicht verstehe, ist, warum die Funktion nie hinzugefügt wurde, uniq
um das Ignorieren aller <number>
Felder außer den ersten zu ermöglichen .
Eine verbreitete Awk-Redewendung ist:
awk '!a[$1]++'
Hiermit werden nur die Zeilen gedruckt, die das erste auftretende Vorkommen ihres ersten Felds enthalten.
Dies schien mir immer der Funktion von sehr ähnlich zu sein uniq
.
Natürlich überlappt es ist in Ordnung für Werkzeuge, aber gibt es einen historischen oder UNIX-Philosophie basierte Grund nicht die parallele Funktionalität zu umfassen -f
, der nur die ersten ____ Felder in Erwägung?
Antworten:
Ich weiß nichts über die historischen oder UNIX-philosophischen Gründe (falls vorhanden), aber vor ein paar Jahren hat jemand eine Feature-Anfrage (und einen Patch) auf der
coreutils
Fehlerliste eingereicht , um diese Fähigkeit hinzuzufügenuniq
. Es wurde schließlich abgelehnt:rev | uniq -f | rev
wurde als ausreichend erachtetquelle