Der Linux cut-Befehl: Text ausschneiden

LinuxBeginner
Jetzt üben

Einführung

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

Voraussetzungen

Bevor Sie mit diesem Lab beginnen, stellen Sie sicher, dass Sie über Folgendes verfügen:

  • Grundlegende Vertrautheit mit der Linux-Kommandozeile
  • Zugriff auf ein Linux-Terminal (dieses Lab geht davon aus, dass Sie ein Terminal im Verzeichnis /home/labex/project verwenden)

Die Buchhandlungsdaten verstehen

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

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

cat /home/labex/project/customers.txt

Sie sollten eine Ausgabe sehen, die in etwa so aussieht:

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

Schauen wir uns nun die Datei books.txt an:

cat /home/labex/project/books.txt

Die Ausgabe sollte wie folgt 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 unterschiedlichen Feldern für Kunden und Bücher.

Falls Sie nicht die erwartete Ausgabe sehen oder auf einen Fehler stoßen, überprüfen Sie Folgendes:

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

Kundennamen extrahieren

Nachdem wir unsere Daten gesehen haben, verwenden wir den cut-Befehl, um spezifische Informationen zu extrahieren. Wir beginnen damit, die Kundennamen aus der Datei customers.txt zu extrahieren.

Der cut-Befehl verwendet die Option -d, um ein Trennzeichen (in unserem Fall ein Komma) anzugeben, 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 aufschlüsseln:

  • 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 genauso behandelt wie jede andere Zeile in der Datei.

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 Ausgabe ab der zweiten Zeile aus und überspringt somit effektiv die Kopfzeile

Die Ausgabe sollte nun wie folgt aussehen:

John Doe
Jane Smith
Lily Chen
Andy Brown

Falls Sie nicht die erwartete Ausgabe sehen:

  • Überprüfen Sie, ob Sie den Befehl exakt wie gezeigt 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 aus unseren Daten extrahieren. Lassen Sie uns sowohl die Kundennamen als auch das Alter aus der Datei customers.txt extrahieren.

Verwenden Sie den folgenden Befehl:

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

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

  • -f 2,3: Extrahiert das zweite und 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 eingefügt haben
  • Überprüfen Sie, ob die Datei customers.txt nicht 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 ermöglicht es uns auch, einen Bereich von Feldern zu extrahieren. Lassen Sie uns alle Felder von der Kunden-ID bis zum Alter (Felder 1-3) aus der Datei customers.txt extrahieren.

Verwenden Sie diesen Befehl:

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

Hier ist das Neue an diesem Befehl:

  • -f 1-3: Dies gibt einen Bereich von Feldern von 1 bis 3 inklusive an

Ihre Ausgabe sollte in 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 einen Bereich von Feldern von 1 bis 3. Sie können auch Bereiche und einzelne Felder kombinieren, wie z. B. -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 Feldern fester Breite

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

Lassen Sie uns eine neue Datei mit Daten 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-Dokument (<<EOF), um eine neue Datei namens inventory.txt mit Daten fester Breite zu erstellen.

Lassen Sie uns nun nur die Buchtitel anhand der Zeichenpositionen extrahieren:

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

Hier ist das Neue:

  • -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 aus jeder Zeile, was dem Titelfeld in unseren Daten fester Breite entspricht.

Falls Sie nicht die erwartete Ausgabe erhalten:

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

Kombination von cut mit anderen Befehlen

Der cut-Befehl wird noch leistungsfähiger, wenn er mit anderen Linux-Befehlen kombiniert wird. Lassen Sie uns cut zusammen mit grep verwenden, um alle Bücher zu finden, die mehr als 20 $ kosten, und 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 Befehlspipeline bewirkt zwei Dinge:

  1. grep -E ',[2-9][0-9]\.[0-9]{2}$': Dies 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 von 20 bis 99, einem Dezimalpunkt und zwei weiteren Ziffern am Ende der Zeile
  2. cut -d ',' -f 2: Dies extrahiert nur den Buchtitel (zweites Feld) aus den Zeilen, die grep gefunden hat

Sie sollten eine Ausgabe sehen, die in etwa so aussieht:

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 allein auszuführen, um zu sehen, welche Zeilen er auswählt
  • Stellen Sie sicher, dass der cut-Befehl das zweite Feld korrekt angibt

Zusammenfassung

In diesem Lab haben Sie gelernt, wie Sie den cut-Befehl unter Linux verwenden, um spezifische Daten aus Textdateien zu extrahieren. Sie haben geübt:

  • Einzelne Felder aus CSV-Dateien zu extrahieren
  • Mehrere Felder und Bereiche von Feldern zu extrahieren
  • Mit Daten fester Breite zu arbeiten
  • cut mit anderen Befehlen wie grep zu kombinieren

Diese Fähigkeiten sind für die Datenverarbeitung und -analyse in verschiedenen Szenarien von unschätzbarem Wert, von der Verwaltung von Buchbeständen bis hin zur Handhabung jeglicher Art von strukturierten Textdaten.

Zusätzliche cut-Befehlsparameter, die in diesem Lab nicht behandelt wurden:

  • -s: Unterdrückt Zeilen, die keine Trennzeichen enthalten
  • --output-delimiter=STRING: Verwendet STRING als Ausgabetrennzeichen
  • --complement: Ergänzt den Satz der ausgewählten Bytes, Zeichen oder Felder

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