# column — Eingaben in Spalten und Tabellen formatieren

> Praxis-Guide zu column — Listen in Spalten setzen, ausgerichtete Tabellen aus getrennten Daten erzeugen und Befehlsausgaben im Terminal lesbar formatieren.

Source: https://www.jpkc.com/db/cheatsheets/files-text/column/

<!-- PROSE:intro -->
column formatiert Eingaben in saubere, ausgerichtete Spalten oder Tabellen – ideal, um unübersichtliche Befehlsausgaben oder getrennte Daten im Terminal lesbar zu machen. Im einfachsten Fall verteilst du eine Liste auf mehrere Spalten, die die Terminalbreite ausfüllen; mit `-t` erkennt column die Spaltenanzahl automatisch und richtet eine echte Tabelle aus. Über `-s` legst du das Eingabe-Trennzeichen fest, mit `-o` das Ausgabe-Trennzeichen, und mit `-N`, `-H`, `-O` oder `-R` benennst, versteckst, ordnest und richtest du einzelne Spalten aus. Die moderne util-linux-Version kann sogar JSON ausgeben. Beachte, dass `column` zwischen Distributionen und Versionen variiert – die hier gezeigten Optionen setzen ein aktuelles util-linux voraus.
<!-- PROSE:intro:end -->

## Grundlagen

`column <file>` — Füllt Spalten vor Zeilen. Formatiert die Eingabe in mehrere Spalten, die die Terminalbreite ausfüllen.

```bash
column /etc/shells
```

`<command> | column` — Setzt Befehlsausgaben in Spalten, die die Terminalbreite ausfüllen.

```bash
echo -e 'one\ntwo\nthree\nfour\nfive\nsix' | column
```

`column -x <file>` — Füllt Zeilen vor Spalten (von links nach rechts, dann nächste Zeile).

```bash
ls /usr/bin | column -x
```

`column -c <width> <file>` — Legt die Ausgabebreite in Zeichen fest, statt die Terminalbreite zu nutzen.

```bash
column -c 40 names.txt
```

## Tabellenmodus

`column -t <file>` — Erzeugt eine Tabelle: ermittelt die Spaltenanzahl und richtet sie aus.

```bash
column -t /etc/fstab
```

`column -t -s '<sep>' <file>` — Erzeugt eine Tabelle mit einem eigenen Eingabe-Trennzeichen.

```bash
column -t -s ',' data.csv
```

`column -t -s ':' <file>` — Erzeugt eine Tabelle aus doppelpunktgetrennten Daten.

```bash
column -t -s ':' /etc/passwd
```

`column -t -s $'\t' <file>` — Erzeugt eine Tabelle aus tabulatorgetrennten Daten.

```bash
column -t -s $'\t' data.tsv
```

`column -t -o '<sep>' <file>` — Legt das Ausgabe-Spaltentrennzeichen fest (Standard: zwei Leerzeichen).

```bash
column -t -s ',' -o ' | ' data.csv
```

## Spaltenauswahl & Benennung

`column -t -N <names> <file>` — Setzt Spaltennamen als kommagetrennte Liste und fügt eine Kopfzeile hinzu.

```bash
column -t -N 'Name,Age,City' -s ',' data.csv
```

`column -t -H <columns> <file>` — Blendet angegebene Spalten aus (per Name oder 0-basiertem Index).

```bash
column -t -s ':' -N 'User,Pass,UID,GID,Info,Home,Shell' -H Pass /etc/passwd
```

`column -t -O <columns> <file>` — Ordnet die Spalten in der angegebenen Reihenfolge an.

```bash
column -t -s ',' -O 'City,Name,Age' data.csv
```

`column -t -R <columns> <file>` — Richtet angegebene Spalten rechtsbündig aus (per Name oder 0-basiertem Index).

```bash
column -t -s ',' -R 'Price,Amount' sales.csv
```

## Erweiterte Tabellenoptionen

`column -t -l <count> <file>` — Begrenzt die Spaltenanzahl im Tabellenmodus.

```bash
column -t -l 3 data.txt
```

`column -t -e <file>` — Ignoriert leere Zeilen im Tabellenmodus nicht.

```bash
column -t -e data.txt
```

`column -t -n <file>` — Setzt den Namen der Tabelle (wirkt nur bei JSON-Ausgabe mit -J; im reinen Textmodus ohne sichtbaren Effekt).

```bash
column -t -n -N 'PID,User,Command' -s ',' procs.csv
```

`column -t -W <columns> <file>` — Bricht Text in angegebenen Spalten um, wenn er die Terminalbreite überschreitet.

```bash
column -t -s ',' -W 'Description' items.csv
```

## JSON-Ausgabe

`column -t -J <file>` — Gibt die Tabelle als JSON-Array von Objekten aus (benötigt -N bzw. eine Kopfzeile).

```bash
column -t -s ',' -J -N 'Name,Age,City' data.csv
```

`column -t -J -n <name> <file>` — Legt den Namen des JSON-Arrays in der Ausgabe fest.

```bash
column -t -s ',' -J -n 'users' -N 'Name,Email' users.csv
```

## Pipelines

`<command> | column -t` — Richtet leerraumgetrennte Befehlsausgaben zu einer sauberen Tabelle aus.

```bash
mount | column -t
```

`<command> | column -t -s '<sep>'` — Erzeugt eine ausgerichtete Tabelle aus getrennter Befehlsausgabe.

```bash
lsblk -o NAME,SIZE,TYPE,MOUNTPOINT | column -t
```

`printf '%s\n' <items> | column` — Formatiert eine Liste von Elementen zur Anzeige in Spalten.

```bash
printf '%s\n' red green blue yellow orange purple | column
```

`<command> | column -t -s $'\t'` — Formatiert tabulatorgetrennte Ausgaben zu einer ausgerichteten Tabelle.

```bash
docker stats --no-stream --format 'table {{.Name}}\t{{.CPUPerc}}\t{{.MemUsage}}' | column -t -s $'\t'
```

## Typische Anwendungsfälle

`cat /etc/passwd | column -t -s ':'` — Zeigt /etc/passwd als lesbare, ausgerichtete Tabelle an.

```bash
cat /etc/passwd | column -t -s ':'
```

`(head -1 <file> && tail -n +2 <file> | sort) | column -t -s ','` — Sortiert eine CSV-Datei (Kopfzeile bleibt oben) und zeigt sie als ausgerichtete Tabelle an.

```bash
(head -1 data.csv && tail -n +2 data.csv | sort -t',' -k2) | column -t -s ','
```

`printf '%-15s %s\n' 'Key' 'Value' && printf '%-15s %s\n' <pairs>` — Manuelle Spaltenformatierung mit printf, wenn column nicht flexibel genug ist.

```bash
printf '%-15s %s\n' 'Host' 'example.com' 'Port' '443' 'Protocol' 'HTTPS'
```

`awk -F: '{print $1, $3, $7}' /etc/passwd | column -t` — Wählt mit awk bestimmte Felder aus und formatiert sie als ausgerichtete Tabelle.

```bash
awk -F: '{print $1, $3, $7}' /etc/passwd | column -t
```

`column -t -s ',' -o ' | ' <file>` — Wandelt CSV in eine pipe-getrennte Tabelle um (Markdown-ähnlich).

```bash
column -t -s ',' -o ' | ' data.csv
```

`paste <file1> <file2> | column -t -s $'\t'` — Führt zwei Dateien nebeneinander zusammen und richtet sie als Tabelle aus.

```bash
paste names.txt scores.txt | column -t -s $'\t'
```

<!-- PROSE:outro -->
## Fazit

column verwandelt unleserliche Datenströme mit einem einzigen `-t` in saubere Tabellen – unschlagbar, um Befehlsausgaben oder CSV-Dateien im Terminal überfliegbar zu machen. Bedenke aber zwei Stolperfallen: Erstens ist `column` nicht überall gleich – die mächtigen Optionen (`-N`, `-O`, `-H`, `-J`) stammen aus util-linux und fehlen auf BSD/macOS, wo column deutlich schlanker ist. Zweitens fasst column mit `-s` aufeinanderfolgende Trennzeichen standardmäßig nicht zusammen, sodass leere Felder als eigene Spalten erscheinen können. Für die reine Anzeige ist column perfekt; zum Weiterverarbeiten von Daten greifst du besser zu cut, awk oder einem CSV-Parser.

## Weiterführende Links

- [column(1) man page (util-linux)](https://man7.org/linux/man-pages/man1/column.1.html) – offizielle Referenz aller Optionen (englisch)
- [ubuntuusers-Wiki: util-linux](https://wiki.ubuntuusers.de/util-linux/) – deutschsprachige Übersicht zum util-linux-Paket, das column enthält
<!-- PROSE:outro:end -->

## Verwandte Kommandos

- [cut](https://www.jpkc.com/db/cheatsheets/files-text/cut/) – Felder, Zeichen oder Byte-Bereiche aus Zeilen herausschneiden
- [paste](https://www.jpkc.com/db/cheatsheets/files-text/paste/) – Zeilen mehrerer Dateien spaltenweise zusammenführen
- [sort](https://www.jpkc.com/db/cheatsheets/files-text/sort/) – Zeilen sortieren, oft als Vorstufe vor der Tabellenanzeige

