← Весь справочник

column

Выровнять текст в таблицу, задать заголовки, переставить и спрятать столбцы, вывести JSON

column из пакета util-linux делает из «рваного» текста ровную таблицу: с -t разбивает строки на поля и выравнивает их по ширине самого длинного значения. Без -t раскладывает список в несколько колонок, как ls. Удобен в конце конвейера: mount | column -t, … | column -t -s, для CSV.

Синтаксис

column -t [опции] [файл…]          # таблица
column [-c ширина] [-x] [файл…]    # список в несколько колонок

Без файлов читает стандартный ввод.

Опции

Режим таблицы

ОпцияЧто делает
-tпостроить таблицу: разбить строки на поля и выровнять столбцы
-s СИМВОЛЫразделители полей на входе (любой из символов). По умолчанию — пробелы и табуляции, идущие подряд считаются одним разделителем
-o СТРОКАразделитель столбцов на выходе (по умолчанию два пробела), например -o ' | '
-l Nне больше N столбцов: всё, что дальше, остаётся в последнем столбце как есть
-Lсохранять пустые строки (по умолчанию выбрасываются)

Заголовки и столбцы

Опции ниже работают с -t и ссылаются на столбцы по имени из -N или по номеру с 1.

ОпцияЧто делает
-N имя1,имя2,…задать имена столбцов и напечатать их строкой-заголовком
-dне печатать заголовок (имена из -N нужны только чтобы ссылаться на столбцы)
-R столбцывыровнять эти столбцы по правому краю — удобно для чисел
-H столбцыспрятать эти столбцы
-O столбцыпорядок вывода столбцов, например -O C,A
-T столбцыобрезать текст в этих столбцах, если не влезает в ширину
-W столбцыпереносить текст в этих столбцах, если не влезает
-E столбцыне учитывать слишком длинные значения этих столбцов при расчёте ширины
-Jвывести таблицу как JSON: массив объектов с ключами из -N
-n имяимя массива в JSON (по умолчанию table)

Режим списка (без -t)

ОпцияЧто делает
-c ШИРИНАширина вывода в символах (по умолчанию — ширина терминала, в конвейере 80)
-xзаполнять сначала строки, потом колонки (по умолчанию — сначала колонки)

Примеры

printf 'name age city\nalice 30 Moscow\nbob 4 Tver\n' > people.txt

# ровная таблица
column -t people.txt

# CSV: разделитель — запятая, пустые поля сохраняются
printf 'a,b,c\n1,,3\n' | column -t -s,

# свой разделитель на выходе
printf 'a:b\n11:2\n' | column -t -s: -o ' | '

# добавить заголовок и выровнять числа вправо
printf 'x 1\nyyyy 1000\n' | column -t -N name,size -R size

# переставить и спрятать столбцы
printf '1 2 3\n4 5 6\n' | column -t -N A,B,C -O C,A -H B

# в JSON
printf 'x 1\ny 2\n' | column -t -N name,n -J -n items

# первые два поля — столбцы, остаток строки — как есть
printf 'id 1 some long text\nid 22 short\n' | column -t -l 3

# список в колонки
seq 12 | column -c 30
seq 12 | column -c 30 -x

# /etc/passwd — читаемо
column -t -s: /etc/passwd | head -n 3

Подводные камни

  • Кириллица в локали C превращается в \xd0\xb8…. В песочнице локаль по умолчанию C, и column экранирует все не-ASCII байты. Запускай с LC_ALL=C.UTF-8 column -t — тогда и текст, и ширина столбцов будут правильными.
  • С -s каждый разделитель значим. Без -s несколько пробелов подряд — один разделитель. С -s ' ' два пробела подряд дают пустой столбец, и таблица съезжает. Для текста, выровненного пробелами, -s не указывай.
  • Кавычки CSV не понимаются. a,"b,c",d с -s, разобьётся на четыре поля: a, "b, c", d. Для CSV с кавычками нужен настоящий парсер, например модуль csv в python3.
  • Пустые строки по умолчанию выбрасываются. Если они нужны как разделители блоков, добавь -L.
  • -N не берёт заголовок из файла, а добавляет новый. Если первая строка ввода уже заголовок, -N не нужен — она выровняется вместе с данными. А если имена нужны для -R или -H, отрежь старый заголовок (tail -n +2) и передай те же имена в -N.
  • Режим списка использует табуляции для выравнивания: при копировании в другие программы колонки могут «поехать».
  • Это column из util-linux 2.39. В BSD-версии (macOS) и в старых util-linux нет многих опций режима таблицы (-N, -R, -J и других), так что рецепты отсюда там могут не работать.

См. также

paste · join · cut · awk · nl