Linux cut-Befehl: Text ausschneiden

LinuxBeginner
Jetzt üben

Einführung

In diesem Praktikum lernen Sie, wie Sie den cut-Befehl unter Linux einsetzen, um Daten aus Textdateien zu extrahieren und zu analysieren. Wir simulieren ein Szenario, in dem Sie in einer örtlichen Buchhandlung arbeiten und Kunden- sowie Buchinformationen verarbeiten müssen. Der cut-Befehl hilft Ihnen dabei, gezielt Spalten oder Felder aus Ihren Datendateien herauszufiltern, was eine effiziente Datenverwaltung und -analyse ermöglicht.

Voraussetzungen

Bevor Sie mit diesem Praktikum beginnen, sollten Sie über Folgendes verfügen:

  • Grundlegende Vertrautheit mit der Linux-Kommandozeile
  • Zugriff auf ein Linux-Terminal (dieses Praktikum setzt voraus, dass Sie ein Terminal im Verzeichnis /home/labex/project verwenden)

Die Buchhandlungsdaten verstehen

Beginnen wir damit, uns die Datendateien der Buchhandlung anzusehen. Wir haben zwei Dateien: customers.txt und books.txt.

Zuerst schauen wir uns den Inhalt der Datei customers.txt an:

cat /home/labex/project/customers.txt

Sie sollten eine Ausgabe sehen, die dieser ähnelt:

ID,Name,Age,Email
1,John Doe,25,john.doe@email.com
2,Jane Smith,35,jane.smith@email.com
3,Lily Chen,30,lily.chen@email.com
4,Andy Brown,22,andy.brown@email.com

Nun werfen wir einen Blick auf die Datei books.txt:

cat /home/labex/project/books.txt

Die Ausgabe sollte etwa so aussehen:

ISBN,Title,Author,Price
978-1234567890,The Great Adventure,Alice Writer,19.99
978-2345678901,Mystery in the Woods,Bob Author,24.99
978-3456789012,Cooking Basics,Carol Chef,15.99
978-4567890123,Science Explained,David Scientist,29.99

Diese Dateien enthalten kommagetrennte Werte (CSV) mit verschiedenen Feldern für Kunden und Bücher.

Falls Sie nicht die erwartete Ausgabe sehen oder eine Fehlermeldung erhalten, prüfen Sie bitte Folgendes:

  • Stellen Sie sicher, dass Sie sich im richtigen Verzeichnis befinden (/home/labex/project).
  • Überprüfen Sie mit ls -l, ob die Dateien existieren.
  • Falls die Dateien fehlen, müssen Sie diese eventuell manuell erstellen oder Ihren Administrator kontaktieren.

Kundennamen extrahieren

Nachdem wir unsere Daten gesichtet haben, verwenden wir nun den cut-Befehl, um gezielt Informationen zu extrahieren. Wir beginnen damit, die Namen der Kunden aus der Datei customers.txt auszulesen.

Der cut-Befehl verwendet die Option -d, um ein Trennzeichen (in unserem Fall ein Komma) festzulegen, und die Option -f, um auszuwählen, welche Felder angezeigt werden sollen.

Führen Sie den folgenden Befehl aus:

cut -d ',' -f 2 /home/labex/project/customers.txt

Lassen Sie uns diesen Befehl zerlegen:

  • cut: Der Name des Befehls, den wir verwenden.
  • -d ',': Gibt an, dass wir ein Komma als Trennzeichen zwischen den Feldern verwenden.
  • -f 2: Weist cut an, das zweite Feld zu extrahieren.
  • /home/labex/project/customers.txt: Der Pfad zu unserer Eingabedatei.

Sie sollten eine Ausgabe wie diese sehen:

Name
John Doe
Jane Smith
Lily Chen
Andy Brown

Beachten Sie, dass die Kopfzeile "Name" ebenfalls enthalten ist. Das liegt daran, dass cut die Kopfzeile wie jede andere Zeile in der Datei behandelt.

Wenn Sie die Kopfzeile ausschließen möchten, können Sie den tail-Befehl in Kombination mit cut verwenden:

cut -d ',' -f 2 /home/labex/project/customers.txt | tail -n +2

Diese Pipeline bewirkt zwei Dinge:

  1. cut extrahiert das zweite Feld (Namen) aus jeder Zeile.
  2. tail -n +2 gibt die Daten ab der zweiten Zeile aus und überspringt somit effektiv die Kopfzeile.

Die Ausgabe sollte nun so aussehen:

John Doe
Jane Smith
Lily Chen
Andy Brown

Falls Sie nicht die erwartete Ausgabe sehen:

  • Prüfen Sie genau, ob Sie den Befehl exakt wie angegeben eingegeben haben.
  • Stellen Sie sicher, dass die Datei customers.txt nicht verändert wurde.
  • Versuchen Sie erneut cat /home/labex/project/customers.txt auszuführen, um den Dateiinhalt zu verifizieren.

Mehrere Felder extrahieren

Oft müssen wir mehrere Felder gleichzeitig aus unseren Daten extrahieren. Lassen Sie uns sowohl die Namen als auch das Alter der Kunden aus der Datei customers.txt auslesen.

Verwenden Sie den folgenden Befehl:

cut -d ',' -f 2,3 /home/labex/project/customers.txt

Dieser Befehl ähnelt dem vorherigen, aber nun geben wir zwei Felder in der Option -f an:

  • -f 2,3: Extrahiert das zweite und das dritte Feld (Name und Alter).

Ihre Ausgabe sollte so aussehen:

Name,Age
John Doe,25
Jane Smith,35
Lily Chen,30
Andy Brown,22

Wie Sie sehen, können wir mehrere Felder angeben, indem wir sie in der Option -f durch Kommas trennen. Die Ausgabe behält das ursprüngliche Trennzeichen (Komma) zwischen den extrahierten Feldern bei.

Falls Ihre Ausgabe nicht übereinstimmt:

  • Stellen Sie sicher, dass Sie das Komma zwischen 2 und 3 in der Option -f gesetzt haben.
  • Überprüfen Sie, ob die Datei customers.txt verändert wurde.
  • Versuchen Sie, den Befehl ohne die Option -d ',' auszuführen, um zu sehen, ob die Datei ein anderes Trennzeichen verwendet.

Einen Bereich von Feldern extrahieren

Der cut-Befehl erlaubt es uns auch, einen ganzen Bereich von Feldern zu extrahieren. Lassen Sie uns alle Felder von der Kunden-ID bis zum Alter (Felder 1 bis 3) aus der Datei customers.txt auslesen.

Verwenden Sie diesen Befehl:

cut -d ',' -f 1-3 /home/labex/project/customers.txt

Das ist neu in diesem Befehl:

  • -f 1-3: Dies gibt einen Bereich von Feldern von 1 bis einschließlich 3 an.

Ihre Ausgabe sollte etwa so aussehen:

ID,Name,Age
1,John Doe,25
2,Jane Smith,35
3,Lily Chen,30
4,Andy Brown,22

Dieser Befehl extrahiert die Felder 1, 2 und 3. Sie können auch Bereiche und einzelne Felder kombinieren, zum Beispiel -f 1-3,5, um die Felder 1, 2, 3 und 5 zu extrahieren.

Falls Sie nicht die erwartete Ausgabe sehen:

  • Überprüfen Sie, ob Sie einen Bindestrich (-) zwischen 1 und 3 in der Option -f verwendet haben.
  • Stellen Sie sicher, dass die Datei customers.txt nicht verändert wurde.
  • Versuchen Sie, jedes Feld einzeln zu extrahieren (z. B. -f 1, -f 2, -f 3), um zu prüfen, ob alle Felder in der Datei vorhanden sind.

Arbeiten mit festen Feldbreiten

Manchmal sind Daten nicht durch Trennzeichen getrennt, sondern in Spalten mit fester Breite angeordnet. Der cut-Befehl kann auch damit umgehen, indem er die Option -c verwendet, um Zeichenpositionen anzugeben.

Lassen Sie uns eine neue Datei mit Daten in fester Breite erstellen:

cat << EOF > /home/labex/project/inventory.txt
ISBN     Title          Quantity
1234567890The Great Adv      100
2345678901Mystery in th       75
3456789012Cooking Basi       50
4567890123Science Exp        125
EOF

Dieser Befehl verwendet ein "Here-Document" (<<EOF), um eine neue Datei namens inventory.txt mit festen Spaltenbreiten zu erstellen.

Nun extrahieren wir nur die Buchtitel anhand der Zeichenpositionen:

cut -c 11-25 /home/labex/project/inventory.txt

Das ist neu:

  • -c 11-25: Dies weist cut an, die Zeichen 11 bis 25 aus jeder Zeile zu extrahieren.

Sie sollten Folgendes sehen:

itle          Q
The Great Adv
Mystery in th
Cooking Basi
Science Exp

Dieser Befehl extrahiert die Zeichen 11 bis 25 jeder Zeile, was in unseren Daten mit fester Breite dem Titelfeld entspricht.

Falls Sie nicht die erwartete Ausgabe erhalten:

  • Stellen Sie sicher, dass die Datei inventory.txt korrekt erstellt wurde (prüfen Sie dies mit cat /home/labex/project/inventory.txt).
  • Überprüfen Sie, ob Sie den richtigen Zeichenbereich (11-25) verwendet haben.
  • Versuchen Sie, den Zeichenbereich anzupassen, falls die Titel verschoben erscheinen.

cut mit anderen Befehlen kombinieren

Der cut-Befehl wird noch mächtiger, wenn man ihn mit anderen Linux-Befehlen kombiniert. Lassen Sie uns cut zusammen mit grep verwenden, um alle Bücher zu finden, die mehr als 20 $ kosten, und nur deren Titel anzuzeigen.

Führen Sie diesen Befehl aus:

grep -E ',[2-9][0-9]\.[0-9]{2}$' /home/labex/project/books.txt | cut -d ',' -f 2

Diese Befehlskette (Pipeline) bewirkt zwei Dinge:

  1. grep -E ',[2-9][0-9]\.[0-9]{2}$': Verwendet einen regulären Ausdruck, um Zeilen zu finden, in denen der Preis 20 $ oder mehr beträgt.
    • ,[2-9][0-9]\.[0-9]{2}$: Sucht nach einem Komma, gefolgt von einer Zahl zwischen 20 und 99, einem Punkt und zwei weiteren Ziffern am Ende der Zeile.
  2. cut -d ',' -f 2: Extrahiert nur den Buchtitel (das zweite Feld) aus den Zeilen, die grep gefunden hat.

Sie sollten eine Ausgabe sehen, die dieser ähnelt:

Mystery in the Woods
Science Explained

Falls Sie nicht die erwartete Ausgabe sehen:

  • Überprüfen Sie, ob die Datei books.txt die korrekten Daten enthält.
  • Prüfen Sie, ob Sie den regulären Ausdruck für grep korrekt eingegeben haben.
  • Versuchen Sie, den grep-Befehl alleine auszuführen, um zu sehen, welche Zeilen er auswählt.
  • Stellen Sie sicher, dass der cut-Befehl korrekt auf das zweite Feld verweist.

Zusammenfassung

In diesem Praktikum haben Sie gelernt, wie Sie den cut-Befehl unter Linux einsetzen, um gezielt Daten aus Textdateien zu extrahieren. Sie haben folgende Techniken geübt:

  • Extrahieren einzelner Felder aus CSV-Dateien.
  • Extrahieren mehrerer Felder und ganzer Feldbereiche.
  • Arbeiten mit Daten in fester Spaltenbreite.
  • Kombinieren von cut mit anderen Befehlen wie grep.

Diese Fertigkeiten sind für die Datenverarbeitung und -analyse in vielen Szenarien von unschätzbarem Wert, sei es bei der Verwaltung eines Buchbestands oder beim Umgang mit jeglicher Art von strukturierten Textdaten.

Zusätzliche Parameter des cut-Befehls, die in diesem Praktikum nicht behandelt wurden:

  • -s: Zeilen überspringen, die kein Trennzeichen enthalten.
  • --output-delimiter=STRING: Verwendet STRING als Trennzeichen für die Ausgabe.
  • --complement: Extrahiert das Komplement der ausgewählten Bytes, Zeichen oder Felder (also alles außer den gewählten).

Um Ihr Wissen zu vertiefen, experimentieren Sie mit diesen zusätzlichen Parametern und erstellen Sie eigene Datendateien zum Üben. Denken Sie daran, dass der Befehl man cut ein umfassendes Handbuch zum cut-Befehl bietet, falls Sie weitere Informationen benötigen.

Ressourcen