cut

Aus Mikiwiki
Version vom 23. Mai 2021, 09:46 Uhr von Michi (Diskussion | Beiträge)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
Zur Navigation springen Zur Suche springen

Der Shell-Befehl cut schneidet einen angegebenen Teil aus einer Textdatei heraus.

Optionen

-c<liste> (column) Herausschneiden der in "liste" angegebenen Spalten und Anzeige auf der Standardausgabe. Eine Spalte ist genau ein Zeichen breit. "liste" ist eine Liste von Zahlen oder Zahlenbereichen.
Option Beschreibung
-c1,3,5 schneidet die erste, dritte und fünfte Spalte heraus
-c1-3,5 schneidet die erste bis dritte und die fünfte Spalte heraus
-c-3,5 schneidet die erste bis dritte und die fünfte Spalte heraus
-c3- schneidet die dritte bis zur letzten Spalte heraus
-f<liste> (field) Herausschneiden der in "liste" angegebenen Felder aus jeder Zeile und Anzeige auf der Standardausgabe. Ein Feld besteht aus den Zeichen, die zwischen zwei Feldtrennzeichen stehen. Standard-Feldtrennzeichen ist das Tabulatorzeichen.
-d<zeichen> Feldtrennzeichen ist das Zeichen "zeichen". Ist das Feldtrennzeichen das Leerzeichen oder ein Shell-Sonderzeichen, so muss es in Hochkommas eingeschlossen werden (z. B. -c' ' ).
-s<zeichen> Zeilen ohne Feldtrennzeichen werden nicht ausgegeben.

Verwendung

Auswahl der durch ":" getrennten Felder Benutzername (1. Feld) und Klartextnamen (5. Feld) aus der Datei "/etc/passwd".

$ cut -d: -f1,5 /etc/passwd

Auswahl des Zeichens in der vierten Spalte von Datei "file". Dieses Zeichen wird als erste Spalte in dieselbe Datei wieder eingefügt.

$ cut -c4 file | paste - file

Auswahl der Byte-Positionen 5-9 jeder Zeile von Datei "file".

$ cut -b5-9 file

Die ausgewählten Eingabefelder werden in derselben reihenfolgen ausgegeben wie sie gelesen werden - eine Änderung der Reihenfolge ist nicht möglich. Folgende Befehle ergeben also dieselbe Ausgabe.

$ echo "abc" | cut -c1-3
$ echo "abc" | cut -c1,2,3
$ echo "abc" | cut -c3,2,1
abc

Für eine geänderte Reihenfolge kann die Bash Substring-Syntax verwendet werden.

$ ABC="abc"
$ echo "${ABC:2:1}${ABC:1:1}${ABC:0:1}"
cba

Beispiel

Aus der Datei "rechnung" sollen die Namen der Kunden, deren Rechnung im Mai 1998 fällig ist, zusammen mit dem Rechnungsbetrag herausgefiltert werden. Die Felder der Datei "rechnung" sind durch genau ein Tabulatorzeichen voneinander getrennt und mit Leerzeichen aufgefüllt.

$ vi rechnung
Meier   Bern    10.000  13.05.1998
Schmid  Basel    7.000  01.07.1998
Müller  Genève   8.000  07.05.1998
Huber   Zürich     450  20.06.1998

Mit grep werden alle Zeilen der Datei "rechnung", welche die Zeichenkette "05.1998" enthalten auf die Standardausgabe geschrieben. cut erhält diese Zeilen als Eingabe, schneidet aus ihnen das erste und dritte Feld heraus (Name und Rechnungsbetrag) und schreibt die Ausgabe in die Datei "namen".

$ grep '\.05\.1998' rechnung | cut -f1,3 > namen
$ more namen
Meier   10.000
Müller   8.000

Zusätzlich soll den Kundennamen das Datum vorangestellt und danach das Ergebnis nach Rechnungsdatum sortiert werden. Dabei wird zuerst das zu den ausgewählten Kundennamen gehörige Datum in die Datei "datum" geschrieben. Mit paste werden die Dateien "datum" und "namen" dann horizontal, getrennt durch ein Tabulatorzeichen, zusammengefügt. sort sortiert die Ausgabezeilen dann aufsteigend nach Datum.

$ grep '\.05\.1998' rechnung | cut -f4 datum > datum
$ paste datum namen | sort
07.05.1998  Müller   8.000
13.05.1998  Meier   10.000

Weblinks

Herausgeber Sprache Webseitentitel Anmerkungen
Wikipedia ger cut (Unix)wbm Enzyklopädischer Artikel