Linux: cut
Das cut
Kommando ist ein unverzichtbares Werkzeug in der Linux-Kommandozeile, das zum Extrahieren bestimmter Spalten oder Zeichen aus Textdateien verwendet wird. Es ist besonders nützlich für die Verarbeitung von strukturierten Daten wie CSV-Dateien, Log-Files oder anderen tabellarischen Formaten. Nachfolgend sind die wichtigsten Konzepte und Anwendungen aufgelistet.
Grundstruktur
Die Grundstruktur des cut
Befehls folgt diesem Prinzip:
cut [OPTIONEN] [DATEI]
Das einfachste Beispiel:
cut -c1 datei.txt
Dies gibt das erste Zeichen jeder Zeile aus.
Zeichen extrahieren (-c)
Mit der Option -c
können bestimmte Zeichen-Positionen extrahiert werden:
# Erstes Zeichen jeder Zeile
cut -c1 datei.txt
# Zeichen 1-5 jeder Zeile
cut -c1-5 datei.txt
# Zeichen 1, 3 und 5
cut -c1,3,5 datei.txt
# Ab dem 3. Zeichen bis zum Ende
cut -c3- datei.txt
# Vom Anfang bis zum 10. Zeichen
cut -c-10 datei.txt
Spalten extrahieren (-f)
Die Option -f
(fields) ist die häufigste Verwendung von cut
. Sie extrahiert Spalten basierend auf einem Trennzeichen:
# Erste Spalte (Standard-Trennzeichen: Tab)
cut -f1 datei.txt
# Spalten 1 und 3
cut -f1,3 datei.txt
# Spalten 2-4
cut -f2-4 datei.txt
Trennzeichen ändern (-d)
Das Standard-Trennzeichen ist ein Tabulator. Mit -d
kann ein anderes Trennzeichen definiert werden:
# Komma als Trennzeichen
cut -d',' -f1 datei.csv
# Doppelpunkt als Trennzeichen (typisch für /etc/passwd)
cut -d':' -f1 /etc/passwd
# Leerzeichen als Trennzeichen
cut -d' ' -f2 datei.txt
Praktische Beispiele
Benutzernamen aus /etc/passwd extrahieren
cut -d':' -f1 /etc/passwd
Erste und letzte Spalte einer CSV-Datei
cut -d',' -f1,3 daten.csv
IP-Adressen aus Log-Files extrahieren
# Angenommen, die IP ist in der ersten Spalte
cut -d' ' -f1 access.log
Dateierweiterungen extrahieren
ls -1 | cut -d'.' -f2-
Erweiterte Optionen
Nur Zeilen mit Trennzeichen ausgeben (-s)
Die Option -s
unterdrückt Zeilen, die das Trennzeichen nicht enthalten:
cut -d':' -f1 -s /etc/passwd
Ausgabe-Trennzeichen ändern (–output-delimiter)
# Komma durch Semikolon ersetzen
cut -d',' -f1,2 --output-delimiter=';' datei.csv
Zeichen-Bereiche kombinieren
# Zeichen 1-3 und 7-10
cut -c1-3,7-10 datei.txt
Kombination mit anderen Befehlen
Mit grep filtern
# Nur Zeilen mit "error" und davon die erste Spalte
grep "error" log.txt | cut -d' ' -f1
Mit sort sortieren
# Benutzernamen sortiert ausgeben
cut -d':' -f1 /etc/passwd | sort
Mit uniq eindeutige Werte
# Eindeutige IP-Adressen aus Log
cut -d' ' -f1 access.log | sort | uniq -c
Häufige Anwendungsfälle
CSV-Dateien verarbeiten
# Spalten 1 und 3 einer CSV-Datei
cut -d',' -f1,3 sales.csv
# Alle Spalten außer der ersten
cut -d',' -f2- sales.csv
Systemdateien analysieren
# Alle Shells aus /etc/passwd
cut -d':' -f7 /etc/passwd | sort | uniq
# Home-Verzeichnisse
cut -d':' -f6 /etc/passwd
Log-Analyse
# Stunden aus Zeitstempel extrahieren
cut -c12-13 /var/log/syslog
# Nur Datum aus Zeitstempel
cut -c1-10 /var/log/syslog
Nützliche Kombinationen
Spaltennummer dynamisch ermitteln
# Header einer CSV-Datei anzeigen
head -1 datei.csv | tr ',' '\n' | nl
Mehrere Dateien verarbeiten
# Erste Spalte aus allen CSV-Dateien
cut -d',' -f1 *.csv
Mit awk kombinieren
# cut für einfache Extraktion, awk für komplexere Logik
cut -d',' -f1,3 datei.csv | awk -F',' '{print $1 " -> " $2}'
Grenzen von cut
cut
hat einige Limitationen:
- Kann nicht mit variablen Leerzeichen umgehen (mehrere aufeinanderfolgende Leerzeichen werden als separate Felder behandelt)
- Keine komplexe Mustersuche möglich
- Spalten können nicht neu angeordnet werden
Für komplexere Anforderungen sollte awk
verwendet werden.
Fazit
Das cut
Kommando ist perfekt für schnelle und einfache Spalten-Extraktionen aus strukturierten Textdateien. Es ist deutlich schneller als awk
für einfache Aufgaben und sollte das erste Werkzeug der Wahl sein, wenn nur bestimmte Spalten oder Zeichen extrahiert werden müssen. Für komplexere Textverarbeitung empfiehlt sich dann der Wechsel zu awk
oder sed
.