paste — Zeilen spaltenweise zusammenführen
Praxis-Guide zu paste: Zeilen aus mehreren Dateien spaltenweise nebeneinander zusammenführen, eigene Trennzeichen nutzen und CSV-Daten bauen.
paste fügt Zeilen aus mehreren Dateien spaltenweise nebeneinander zusammen – standardmäßig getrennt durch einen Tabulator, auf Wunsch durch ein beliebiges Trennzeichen (-d). Damit baust du im Handumdrehen Tabellen oder CSV-Daten aus einzelnen Spaltendateien. Mit -s drehst du den Spieß um und fügst stattdessen alle Zeilen einer Datei zu einer einzigen Zeile zusammen. Über den Platzhalter - liest paste auch aus der Standardeingabe, sodass sich ein flacher Datenstrom in mehrere Spalten umbrechen lässt. Dieser Guide zeigt dir die wichtigsten Varianten und ihre Pipeline-Tricks.
Grundlagen
paste <file1> <file2> — Zeilen nebeneinander zusammenführen, durch Tab getrennt.
paste names.txt scores.txtpaste -d '<delim>' <file1> <file2> — Ein eigenes Trennzeichen statt Tab verwenden.
paste -d ',' names.txt scores.txtpaste -d '\n' <file1> <file2> — Zeilen aus zwei Dateien verschränken (abwechselnd).
paste -d '\n' questions.txt answers.txtpaste -s <file> — Alle Zeilen einer Datei zu einer einzigen Zeile zusammenfügen (serieller Modus).
paste -s names.txtpaste -s -d ',' <file> — Alle Zeilen mit Komma zusammenfügen (CSV-ähnliche Ausgabe erzeugen).
paste -s -d ',' names.txtStandardeingabe verwenden
cat <file> | paste - - — Die Eingabe in 2 Spalten anordnen.
seq 6 | paste - -cat <file> | paste - - - — Die Eingabe in 3 Spalten anordnen.
seq 9 | paste - - -cat <file> | paste -d ',' - - — In 2 kommagetrennte Spalten anordnen.
seq 6 | paste -d ',' - -paste <file> - — Eine Datei mit der Standardeingabe nebeneinander zusammenführen.
seq 3 | paste names.txt -Mehrere Trennzeichen
paste -d ',;:' <file1> <file2> <file3> <file4> — Mehrere Trennzeichen für jeden Spaltentrenner reihum verwenden.
paste -d ',;:' f1.txt f2.txt f3.txt f4.txtpaste -d ',\n' - - — Abwechselnd Komma und Zeilenumbruch als Trennzeichen.
seq 6 | paste -d ',\n' - -paste -d '\t|' <file1> <file2> <file3> — Tab und dann Pipe als abwechselnde Trennzeichen verwenden.
paste -d '\t|' col1.txt col2.txt col3.txtTypische Muster
ls | paste -s -d ' ' — Dateien in einer einzigen Zeile auflisten, durch Leerzeichen getrennt.
ls *.txt | paste -s -d ' 'cut -f1 data.tsv | paste -s -d '+' — Aus einer Zahlenspalte einen Summenausdruck erzeugen.
cut -f1 data.tsv | paste -s -d '+' | bcpaste -d ',' <(cmd1) <(cmd2) — Die Ausgabe zweier Befehle nebeneinander kombinieren.
paste -d ',' <(cut -f1 data.tsv) <(cut -f3 data.tsv)seq <n> | paste -s -d ',' — Eine kommagetrennte Zahlenfolge erzeugen.
seq 10 | paste -s -d ','awk '{print $1}' file | paste -s -d '|' — Aus einer Spalte eine pipe-getrennte Liste erzeugen.
awk '{print $1}' users.txt | paste -s -d '|' Fazit
paste ist das Gegenstück zu cut: Während cut Spalten heraustrennt, fügt paste sie wieder zusammen. Achte darauf, dass paste rein zeilenpositionsbasiert arbeitet – es verbindet die jeweils n-te Zeile jeder Datei ohne jeden Abgleich von Schlüsseln; für inhaltlich verknüpfte Spalten brauchst du stattdessen join. Bei -d gibst du mehrere Trennzeichen als Liste an, die reihum für die Spaltenübergänge durchlaufen wird. Steuerzeichen wie Tab oder Zeilenumbruch schreibst du dabei als '\t' bzw. '\n' in einfachen Anführungszeichen, damit die Shell sie unverändert an paste weiterreicht.
Weiterführende Links
- ubuntuusers-Wiki: paste – deutschsprachige Einführung mit Beispielen
- GNU-Coreutils-Handbuch: paste – vollständige Optionsreferenz (englisch)