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/projectverwenden)
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: 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 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:
cutextrahiert das zweite Feld (Namen) aus jeder Zeiletail -n +2gibt 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.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 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
-feingefügt haben - Überprüfen Sie, ob die Datei
customers.txtnicht 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
-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 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 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 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.txtkorrekt erstellt wurde (Sie können dies mitcat /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:
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
cut -d ',' -f 2: Dies extrahiert nur den Buchtitel (zweites Feld) aus den Zeilen, diegrepgefunden 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.txtdie korrekten Daten enthält - Prüfen Sie, ob Sie den regulären Ausdruck für
grepkorrekt 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
cutmit anderen Befehlen wiegrepzu 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.



