VMware ESXi and vSphere Cluster Management
Linux paste-Befehl: Dateien zeilenweise zusammenführen
Lerne den Linux-Befehl paste kennen: Dateien zeilenweise verbinden, Trennzeichen mit -d ändern, den seriellen Modus -s nutzen und Ausgaben weiterverarbeiten.
Der Linux-Befehl paste führt Zeilen aus einer oder mehreren Textdateien zusammen. Im Standardmodus stellt er gleich nummerierte Zeilen nebeneinander. So lassen sich einfache Listen oder tabellarische Daten schnell kombinieren.
Wichtig: paste verknüpft Inhalte ausschließlich nach ihrer Position beziehungsweise Zeilennummer. Der Befehl sucht nicht nach gleichen Namen, IDs oder anderen Schlüsselwerten.
Zweck und Grundprinzip
Im normalen, auch parallelen genannten Modus liest paste die erste Zeile jeder Eingabedatei und gibt sie gemeinsam aus. Danach folgen die zweiten Zeilen aller Dateien, dann die dritten und so weiter.
Jede Eingabedatei liefert dabei ein logisches Feld beziehungsweise eine Spalte. Zwischen diesen Feldern steht standardmäßig ein Tabulator. Ein Tabulator ist ein Steuerzeichen zur Feldtrennung und wird häufig als \t geschrieben.
Die sichtbare Ausrichtung im Terminal ist nicht dasselbe wie die Datenstruktur: Ein Tabulator springt zum nächsten Tabstopp. Inhalte mit unterschiedlicher Länge können deshalb optisch ungleichmäßig wirken, obwohl die Felder korrekt durch Tabulatoren getrennt sind.
Grundsyntax
paste [OPTIONEN] DATEI1 [DATEI2 ...]Ohne Optionen schreibt paste die zusammengeführte Ausgabe auf die Standardausgabe, normalerweise auf das Terminal. Mit einer Shell-Umleitung speicherst du sie in einer Datei:
paste personen.txt orte.txt > personen_orte.tsvDie Reihenfolge der Dateinamen bestimmt die Reihenfolge der erzeugten Felder. Im folgenden Beispiel steht der Inhalt von personen.txt links und der Inhalt von orte.txt rechts:
paste personen.txt orte.txtEin einzelner Bindestrich - steht für die Standardeingabe. Dadurch kann eine Pipeline-Daten liefern, während eine andere Datei direkt als Argument angegeben wird:
printf '%s\n' Nord Süd West | paste - regionen.txtZeilenweise Zusammenführung im Standardmodus
Zwei gleich lange Listen verbinden
Angenommen, die Dateien enthalten folgende Werte:
# personen.txt
Ada
Ben
Cem# orte.txt
Berlin
Bonn
KielDer Befehl lautet:
paste personen.txt orte.txtDie Ausgabe besteht aus drei Zeilen. Zwischen Name und Ort befindet sich jeweils ein Tabulator:
Ada Berlin
Ben Bonn
Cem KielDie Abstände im Beispiel stellen den Tabulator nur sichtbar dar. Im tatsächlichen Ausgabestrom ist dort ein Tabulatorzeichen enthalten, kein festes Muster aus Leerzeichen.
Drei oder mehr Dateien kombinieren
Mehrere Dateien werden zu zusätzlichen Feldern jeder Ausgabezeile:
paste id.txt produkt.txt bestand.txtBei diesen Inhalten:
id.txt: 101 produkt.txt: Tastatur bestand.txt: 7
102 Maus 14entsteht sinngemäß:
101 Tastatur 7
102 Maus 14Die erste Zeile jeder Datei bildet einen Datensatz, ebenso die zweite Zeile jeder Datei. Eine inhaltliche Prüfung, ob ID, Produkt und Bestand fachlich zusammengehören, führt paste nicht durch.
Unterschiedlich lange Eingabedateien
Endet eine Datei früher, entfernt paste die übrigen Zeilen der längeren Datei nicht. Für die fehlenden Werte entstehen leere Felder. Die Ausgabe läuft weiter, bis alle Eingabedateien verarbeitet sind.
paste links.txt rechts.txtMit:
links.txt: A B C
rechts.txt: 1ergibt sich sinngemäß:
A 1
B
CLeere Felder sind Daten, keine automatische Ausrichtungshilfe. paste richtet Inhalte außerdem nicht anhand ihrer sichtbaren Zeichenbreite aus und entfernt keine Zeilen.
Mit wc -l kannst du die Zeilenzahlen vergleichen:
wc -l links.txt rechts.txtTrennzeichen mit -d ändern
Die Option -d beziehungsweise --delimiters legt fest, welche Zeichen zwischen den zusammengeführten Feldern stehen. Ohne diese Option verwendet paste Tabulatoren.
paste -d ',' personen.txt orte.txtBeispielausgabe:
Ada,Berlin
Ben,Bonn
Cem,KielEbenso sind Semikolon, Doppelpunkt, Leerzeichen oder Schrägstrich möglich:
paste -d ';' a.txt b.txt
paste -d ':' a.txt b.txt
paste -d ' ' a.txt b.txt
paste -d '/' a.txt b.txtEin Leerzeichen als Trennzeichen kann die spätere Verarbeitung erschweren, weil nicht mehr klar zwischen einem Feldtrenner und Leerzeichen innerhalb eines Wertes unterschieden wird. Für strukturierte Textdaten sind Tabulatoren oder ein bewusst gewähltes Sonderzeichen oft eindeutiger.
Delimiter-Listen
Eine Delimiter-Liste enthält mehrere Trennzeichen. Sie werden bei mehreren Eingabefeldern nacheinander verwendet. Bei Bedarf wird die Liste wiederholt. Das genaue Verhalten bei Randfällen sollte auf dem Zielsystem geprüft werden.
paste -d ',;' a.txt b.txt c.txtHier wird zwischen dem ersten und zweiten Feld ein Komma und zwischen dem zweiten und dritten Feld ein Semikolon eingesetzt. Bei weiteren Feldern beginnt die Delimiter-Liste wieder von vorn.
Escape-Sequenzen
Je nach paste-Implementierung werden Escape-Sequenzen in der Delimiter-Angabe ausgewertet. Häufige Schreibweisen sind:
\tfür einen Tabulator\nfür einen Zeilenumbruch\\für einen umgekehrten Schrägstrich\0für ein Nullzeichen beziehungsweise eine spezielle Null-Delimiter-Schreibweise, abhängig von der Implementierung- Oktale Schreibweisen für Zeichen, deren Form und Unterstützung systemabhängig sein können
Shell-Quoting und die Escape-Verarbeitung von paste wirken zusammen. Bei Sonderzeichen solltest du die lokale Dokumentation prüfen und das Ergebnis mit kleinen Testdateien kontrollieren.
Serielles Zusammenführen mit -s
Die Option -s beziehungsweise --serial aktiviert den seriellen Modus. Statt gleich nummerierte Zeilen verschiedener Dateien nebeneinanderzustellen, führt paste die Zeilen jeder einzelnen Datei in eine Ausgabezeile über.
paste -d ';' -s werte.txtEnthält werte.txt:
rot
grün
blaulautet die Ausgabe:
rot;grün;blauBei mehreren Dateien erzeugt paste -s pro Datei eine serielle Zeile. Die Reihenfolge entspricht der Reihenfolge der Argumente:
paste -s -d ',' erste.txt zweite.txtDie erste Ausgabezeile enthält alle Zeilen aus erste.txt, die zweite alle Zeilen aus zweite.txt. Die Kombination von -s und -d ist praktisch, um eine einfache Werteliste in eine getrennte Zeile umzuwandeln.
Praktische Datenverarbeitung
Listen zu einfachen Datensätzen verbinden
Namen und Kennungen lassen sich positionsbezogen verbinden:
paste namen.txt kennungen.txt > personen.tsvDie Datei personen.tsv enthält danach pro Zeile einen Namen und die zugehörige Kennung. Diese Zuordnung ist nur dann korrekt, wenn beide Listen in derselben Reihenfolge vorliegen.
Mit anderen Befehlen in einer Pipeline
paste kann mit klassischen Textwerkzeugen kombiniert werden:
paste personen.txt orte.txt | column -t -s $'\t'column -t formatiert die bereits getrennten Felder für eine lesbare Terminalanzeige. Es verändert nicht die fachliche Zuordnung der Daten und ist keine zusätzliche Datenverknüpfung.
paste a.txt b.txt | cut -f 2
paste a.txt b.txt | awk -F '\t' '{ print $1, $2 }'
sort namen.txt | paste - kennungen.txtcut extrahiert Felder, awk erlaubt regelbasierte Verarbeitung und sort kann Daten vorab sortieren. Sortieren ist aber nur dann sinnvoll, wenn die daraus entstehende Reihenfolge fachlich die gewünschte Zuordnung ergibt.
Einfache CSV-ähnliche Ausgabe
paste -d ',' personen.txt orte.txt > personen.csvDas erzeugt eine kommaseparierte, einfache Textausgabe. Es ist jedoch keine vollständige CSV-Implementierung: paste maskiert keine eingebetteten Kommas, Anführungszeichen oder Zeilenumbrüche.
Abgrenzung zu ähnlichen Befehlen
Portabilität und Varianten
Die grundlegenden Optionen -d und -s gehören zur verbreiteten POSIX-Funktionalität und sind auf vielen Unix- und Linux-Systemen verfügbar. Langoptionen wie --delimiters und --serial sowie weitere Optionen können von der konkreten Implementierung abhängen.
Auch die Auswertung von Escape-Sequenzen und oktalen Schreibweisen kann sich zwischen Implementierungen unterscheiden. Wenn ein Skript portabel sein soll, verwende die lokale Handbuchseite, zum Beispiel:
man pastePrüfe insbesondere Sonderzeichen mit kleinen Beispieldateien, bevor du einen Befehl in produktive Automatisierung übernimmst.
Fehlerbehebung
Spalten wirken im Terminal nicht bündig
Tabulatoren springen zu Tabstopps. Unterschiedlich lange Werte oder Sonderzeichen können deshalb eine ungleichmäßige Darstellung verursachen. Prüfe, ob tatsächlich Tabulatoren verwendet werden, und nutze für die Anzeige column -t. Für Weiterverarbeitung sollte ein klar definiertes Trennzeichen vereinbart werden.
Es gibt mehr Zeilen oder leere Felder
Wahrscheinlich haben die Eingabedateien unterschiedliche Zeilenzahlen. Kontrolliere sie mit wc -l. Fehlende Werte müssen bewusst behandelt werden; paste ergänzt keine Inhalte und entfernt keine überzähligen Zeilen.
Die erzeugte CSV-Datei ist nicht korrekt
paste setzt nur Trennzeichen ein. Werte mit Kommas, Anführungszeichen oder Zeilenumbrüchen werden nicht automatisch nach CSV-Regeln maskiert oder quotiert. Verwende paste daher nur für einfache, kontrollierte Werte oder ein Werkzeug, das echtes CSV-Quoting unterstützt.
Werte stehen untereinander
Bei cat werden Dateien grundsätzlich nacheinander ausgegeben. Auch paste -s arbeitet seriell und ist daher für das Nebeneinanderstellen gleich nummerierter Zeilen ungeeignet. Verwende für diesen Fall paste ohne -s.
Paare passen fachlich nicht zusammen
paste koppelt ausschließlich nach Position. Wenn Datensätze über eine ID oder einen Namen verbunden werden sollen, nutze join, awk oder ein anderes schlüsselbasiertes Werkzeug. Ein vorheriges sort ist nur dann korrekt, wenn dadurch die gewünschte Zuordnung entsteht.
Sonderzeichen werden falsch interpretiert
Die Ursache kann Shell-Quoting oder implementationsabhängige Escape-Verarbeitung sein. Setze einfache Anführungszeichen passend ein, prüfe die lokale man paste-Dokumentation und validiere das Ergebnis mit kleinen Testdaten.
Prüfungsrelevante Merksätze
pasteverbindet standardmäßig gleich nummerierte Zeilen parallel.- Jede Eingabedatei liefert ein logisches Feld; die Argumentreihenfolge bestimmt die Feldreihenfolge.
- Der Standard-Delimiter ist ein Tabulator.
-dändert die Trennzeichen,-saktiviert den seriellen Modus.-liest an dieser Stelle aus der Standardeingabe.pastearbeitet positionsbezogen, nicht schlüsselbezogen.column -tverbessert die Anzeige, ist aber keine Datenverknüpfung.- Einfache Trennzeichen-Ausgabe ist nicht automatisch eine vollständig gültige CSV-Datei.
Weitere passende Lektionen: paste-Befehl.