Your Browser is not longer supported

Please use Google Chrome, Mozilla Firefox or Microsoft Edge to view the page correctly
Loading...

{{viewport.spaceProperty.prod}}

uniq - Mehrfache Zeilen suchen

&pagelevel(4)&pagelevel

(report or filter out repeated lines in a file)


uniq sucht in einer Datei nach aufeinanderfolgenden gleichen Zeilen, schreibt die Datei auf die Standard-Ausgabe und lässt dabei die Wiederholungen weg. Nur bei aufeinanderfolgenden Zeilen können Übereinstimmungen festgestellt werden, d.h die Eingabedatei muss sortiert sein.


Syntax


Format 1:uniq[ -c| -d| -u][ -n][ +m][ eingabe_datei[ ausgabe_datei]]
Format 2:uniq[ -c| -d| -u][ -f feld][ -s zeichen][ eingabe_datei[ ausgabe_datei]]

Die beiden Formate werden gemeinsam beschrieben, da die Option -n in Format 1 äquivalent zu der Option -f feld in Format 2 und die Option +m in Format 1 äquivalent zu der Option -s zeichen in Format 2 ist.

Keine Option angegeben

eingabe_datei wird ausgegeben und Wiederholungen werden weggelassen.

-c

Alle Zeilen werden ohne Wiederholungen mit einer Dezimalzahl am Zeilenanfang ausgegeben. Die Zahl gibt an, wie oft die entsprechende Zeile in eingabe_datei nacheinander vorkommt. uniq ignoriert zusätzlich gesetzte Optionen -u oder -d.

-d

Nur die in eingabe_datei mehrfach vorkommenden Zeilen werden jeweils einmal ausgegeben.

-u

Nur die Zeilen werden ausgegeben, die in eingabe_datei nicht wiederholt vorkommen.

-n

Die ersten n Felder ab Zeilenanfang, zusammen mit vor einem Feld stehenden Tabulator- oder Leerzeichen, werden beim Vergleichen der Zeilen nicht berücksichtigt. Ein Feld ist eine nichtleere Zeichenfolge, die durch ein Tabulator- oder Leerzeichen vom Nachbarfeld getrennt ist.

-n nicht angegeben:
Die Zeilen werden ab Zeilenanfang bzw. ab Zeichen m+1 verglichen.

Die Option -n ist äquivalent zu der Option -f feld in Format 2.

+m

Die ersten m Zeichen ab Zeilenanfang werden beim Vergleichen der Zeilen nicht berücksichtigt.
Wird die Option -n zusammen mit der Option +m verwendet, so werden die ersten m Zeichen nach dem n-ten Feld beim Vergleich nicht berücksichtigt. Leerzeichen nach dem n-ten Feld werden nicht ignoriert, sondern müssen im Wert m berücksichtigt werden.

+m nicht angegeben:
Die Zeilen werden ab Zeilenanfang bzw. ab Anfang von Feld n+1 verglichen.

Die Option +m ist äquivalent zu der Option -s zeichen in Format 2.

eingabe_datei

Name der Datei, die untersucht werden soll.

eingabe_datei nicht angegeben:
uniq liest von der Standard-Eingabe.

ausgabe_datei

Name der Datei, in welche die Ausgabe geschrieben werden soll.

ausgabe_datei nicht angegeben:
uniq schreibt auf die Standard-Ausgabe.

Internationale Umgebung

Die folgenden Umgebungsvariablen beeinflussen die Ausführung des Kommandos uniq:

LANG

Gibt einen Standardwert für die Variablen für die internationale Umgebung an, die nicht gesetzt oder Null sind. Ist LANG nicht gesetzt oder Null, wird der entsprechende Standardwert der internationalen Umgebung verwendet. Enthält eine der Internationalisierungsvariablen eine ungültige Einstellung, verhält sich das Kommando so, als sei keine der Variablen definiert worden.

LC_ALL

Ist diese Variable auf einen Wert gesetzt, d. h. ist sie nicht leer, überschreibt dieser Wert die Werte aller übrigen Internationalisierungsvariablen.

LC_CTYPE

Legt die internationale Umgebung für die Interpretation der Byte-Folgen eines Datentexts als Zeichen fest (z.B. Singlebytezeichen im Unterschied zu Mehrbytezeichen in Argumenten und Eingabedateien) sowie die Einteilung der Zeichen in Groß- und Kleinbuchstaben und deren Übereinstimmung.

LC_MESSAGES

Legt die internationale Umgebung für Format und Inhalt der Diagnosemeldungen fest, die in die Standardfehlerausgabe geschrieben werden.

NLSPATH

Legt den Pfad der Meldungsdateien für LC_MESSAGES fest.

Beispiel 1

Sie möchten eine Datei nach gleichen Zeilen durchsuchen, unabhängig davon, wo diese in der Datei stehen.

Für jede dieser Zeilen ist auszugeben, wie oft sie vorkommt.

$ sort datei | uniq -c

Beispiel 2

Sie möchten die 10 häufigsten Wörter der Datei text ausgeben lassen.

$ cat text \
> | sed 's/ */ /g' \
> | tr ' ' '\n' \
> | sed '/^$/d' \
> | sort \
> | uniq -c \
> | while read N W; do printf "%06d %s\n" $N "$W"; done \
> | sort -r \
> | head -n 10

Erläuterung:

  • sed erzeugt aus text eine Liste, in der ein oder mehrere Leerzeichen durch ein Leerzeichen ersetzt werden.

  • tr ersetzt in dieser Liste Leerzeichen durch Neue-Zeile-Zeichen.

  • sed entfernt leere Zeilen aus dieser Liste.

  • sort sortiert diese Liste nach EBCDIC.

  • uniq -c gibt alle Zeilen ohne Wiederholungen aus und schreibt vor jede die Häufigkeit ihres Auftretens.

  • Die while-Schleife ersetzt die Häufigkeit durch eine 6-stellige Zahl mit führenden Nullen.

  • sort -r sortiert diese Häufigkeitsliste rückwärts, d.h. die häufigste Zeile steht in der ersten Zeile.

  • head gibt die ersten 10 Zeilen dieser Liste aus.

Siehe auch

comm, sort