Linux: cut

3. Juli 2025

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.