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/projectverwenden)
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: Weistcutan, 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:
cutextrahiert das zweite Feld (Namen) aus jeder Zeile.tail -n +2gibt 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.txtnicht verändert wurde. - Versuchen Sie erneut
cat /home/labex/project/customers.txtauszufü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
-fgesetzt haben. - Überprüfen Sie, ob die Datei
customers.txtverä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
-fverwendet haben. - Stellen Sie sicher, dass die Datei
customers.txtnicht 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 weistcutan, 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.txtkorrekt erstellt wurde (prüfen Sie dies mitcat /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:
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.
cut -d ',' -f 2: Extrahiert nur den Buchtitel (das zweite Feld) aus den Zeilen, diegrepgefunden 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.txtdie korrekten Daten enthält. - Prüfen Sie, ob Sie den regulären Ausdruck für
grepkorrekt 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
cutmit anderen Befehlen wiegrep.
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.



