CodeGym /Kurse /Docker SELF /Sortieren und Filtern von Dateien: Befehle `sort`, `uniq`...

Sortieren und Filtern von Dateien: Befehle `sort`, `uniq`, `cut`

Docker SELF
Level 8 , Lektion 3
Verfügbar

Sortieren und Filtern von Dateien: Befehle sort, uniq, cut

1. Befehl sort

Der Befehl sort wird verwendet, um Zeilen in einer Textdatei zu sortieren. Er funktioniert mit jedem Textformat: von einfachem Plaintext bis hin zu CSV. Standardmäßig sortiert er Zeilen alphabetisch. Aber es gibt viele Optionen, mit denen du echte Wunder bewirken kannst.

Grundlegende Syntax

sort [optionen] datei

Einfaches Beispiel

Angenommen, wir haben eine Datei names.txt mit folgendem Inhalt:

Charlie
Alice
Bob
David

Wir können sie alphabetisch so sortieren:

sort names.txt

Ergebnis:

Alice
Bob
Charlie
David

Wichtige Optionen für sort

Sortierung in umgekehrter Reihenfolge

Wenn du Zeilen in absteigender Reihenfolge sortieren möchtest, benutze die Option -r:

sort -r names.txt

Ergebnis:

David
Charlie
Bob
Alice

Numerische Sortierung

Für Zahlen kann eine alphabetische Sortierung falsch sein. Zum Beispiel der Inhalt der Datei numbers.txt:

10
2
5
1

Die alphabetische Sortierung ergibt:

1
10
2
5

Aber mit der Option -n (numerische Sortierung):

sort -n numbers.txt

Das Ergebnis wird korrekt sein:

1
2
5
10

Leerzeichen ignorieren

Manchmal enthalten Zeilen Leerzeichen am Anfang oder Ende. Um sort nicht zu verwirren, benutze die Option -b:

sort -b schmutzige_datei.txt

Beispiel

Angenommen, wir haben ein Protokoll von Website-Besuchen besuche.log:

user2 15
user1 5
user3 30
user4 20

Wir möchten die Benutzer nach der Anzahl der Besuche (zweite Spalte) sortieren. Das geht so:

sort -k2 -n besuche.log

Hier bedeutet -k2 "die zweite Spalte für die Sortierung verwenden". Ergebnis:

user1 5
user2 15
user4 20
user3 30

2. Der Befehl uniq

Der Befehl uniq entfernt doppelte Zeilen in einer Datei. Es ist jedoch wichtig zu beachten: Er funktioniert nur mit aufeinander folgenden Duplikaten. Das bedeutet, wenn identische Zeilen in verschiedenen Teilen der Datei vorkommen, müssen diese zuerst sortiert werden.

Grundlegende Syntax

uniq [optionen] datei

Ein einfaches Beispiel

Angenommen, wir haben eine Datei colors.txt:

rot
grün
grün
blau
blau
blau
rot

Wenn wir einfach uniq verwenden:

uniq colors.txt

Das Ergebnis wird sein:

rot
grün
blau
rot

Entfernen von unvermeidlichen Duplikaten

Zuerst sortieren wir die Datei:

sort colors.txt | uniq

Ergebnis:

blau
grün
rot

Wichtige Optionen von uniq

Zählen von Wiederholungen

Wenn du wissen möchtest, wie oft jede Zeile vorkommt, benutze die Option -c:

sort colors.txt | uniq -c

Ergebnis:

   3 blau
   2 grün
   2 rot

Beispiel

In der Datei access.log haben wir eine Liste von IP-Adressen:

192.168.0.1
192.168.0.2
192.168.0.1
192.168.0.3
192.168.0.1

Wir wollen herausfinden, welche IP-Adresse am häufigsten vorkam:

sort access.log | uniq -c | sort -rn

Ergebnis:

   3 192.168.0.1
   1 192.168.0.2
   1 192.168.0.3

3. Der Befehl cut

Der Befehl cut ermöglicht es, bestimmte Teile von Zeilen zu extrahieren, wie z.B. einzelne Spalten in einer CSV-Datei oder Bereiche von Zeichen.

Grundlegende Syntax

cut [Optionen] Datei

Ein einfaches Beispiel

Datei data.csv:

Alice,25,Developer
Bob,30,Designer
Charlie,22,Manager

Wir extrahieren nur die Namen (die erste Spalte):

cut -d',' -f1 data.csv

Ergebnis:

Alice
Bob
Charlie

Wobei:

  • -d',' — Trennzeichen (Komma).
  • -f1 — Feld (Spalte) zum Extrahieren.

Wichtige Optionen von cut

Auswahl von Zeichenbereichen

Wenn unsere Datei data.csv Spalten mit fester Breite enthält:

Alice      25 Developer
Bob        30 Designer
Charlie    22 Manager

Können wir nur das Alter extrahieren (Zeichen 12 bis 14):

cut -c12-14 data.csv

Ergebnis:

25
30
22

Auswahl mehrerer Felder

Wenn wir eine Datei log.csv haben:

2023-01-01,INFO,Server started
2023-01-02,ERROR,Connection failed
2023-01-03,INFO,Server stopped

Wählen wir nur das Datum und die Log-Ebene (Felder 1 und 2):

cut -d',' -f1,2 log.csv

Ergebnis:

2023-01-01,INFO
2023-01-02,ERROR
2023-01-03,INFO

4. Praktisches Beispiel: Kombination von sort, uniq und cut

Wir nehmen eine Log-Datei mit folgenden Daten:

user1,192.168.0.1
user2,192.168.0.2
user1,192.168.0.1
user3,192.168.0.3
user2,192.168.0.2
  1. IP-Adressen extrahieren:
cut -d',' -f2 log.txt
  1. Duplikate entfernen und zählen:
cut -d',' -f2 log.txt | sort | uniq -c
  1. Nach Anzahl der Vorkommen sortieren:
cut -d',' -f2 log.txt | sort | uniq -c | sort -rn

Ergebnis:

2 192.168.0.2
2 192.168.0.1
1 192.168.0.3
Kommentare
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION