Как использовать команду column в Linux для форматирования текста в виде таблиц

Из этой статьи вы узнаете, как использовать команду column в Linux для форматирования текста в виде таблиц, работы с файлами CSV и создания чистого структурированного вывода. Мы приведем более 15 практических примеров форматирования данных.
При работе с файлами CSV или неструктурированными данными часто требуется преобразовать беспорядочный вывод в удобный для чтения табличный формат.
Команда column — это простая, но мощная утилита, которая преобразует необработанные данные в правильно отформатированные столбцы и таблицы, значительно упрощая проверку и анализ данных.
Команда column входит в состав пакета util-linux и форматирует входные данные в столбцы в соответствии со структурой исходного файла.
Независимо от того, очищаете ли вы экспортируемые данные, форматируете ли файлы конфигурации или подготавливаете данные для импорта в базу данных, команда column обеспечивает необходимую гибкость форматирования.
Важные различия в дистрибутивах
Команда column ведет себя по-разному в разных дистрибутивах. В системах на базе Debian традиционно использовалась версия bsdmainutils, а в системах на базе RHEL — версия util-linux, которая новее и предлагает больше возможностей.
Проверьте, какую версию вы используете:
dpkg -S $(which column) # Debian/Ubuntu bsdextrautils: /usr/bin/column
Чтобы проверить версию column и пакет util-linux:
column --version # только для систем на базе RHEL
rpm -qa | grep -i util-linux # RHEL, CentOS, Fedora, Amazon Linux
dpkg -l | grep -i util-linux # Debian/Ubuntu
Пример вывода в системах на базе Debian.
ii util-linux 2.39.3-9ubuntu6.4
Прежде чем переходить к примерам, ознакомьтесь с доступными вариантами:
man column
Базовое форматирование таблиц в Linux
Флаг -t создает таблицу на основе входного файла, например /etc/passwd:
column -t /etc/passwd
Этот вывод выглядит неаккуратно, потому что в столбце пробелы используются в качестве разделителя по умолчанию. Чтобы исправить это, нужно указать собственный разделитель.
Работа с пользовательскими разделителями
Флаг -s указывает пользовательский разделитель для /etc/passwd, в качестве разделителя используется colon:
column -s ":" -t /etc/passwd
Теперь таблица правильно отформатирована, каждое поле разделено соответствующим символом.
В Ubuntu/Debian версия bsdmainutils обрабатывает несколько соседних разделителей как один (так называемое «жадное» поведение), поэтому используйте флаг -n, чтобы этого избежать:
column -t -s ":" -n /etc/passwd # только для Debian/Ubuntu
Форматирование CSV и файлов с разделителями
Для файлов с разделителями-запятыми:
column -t -s "," data.csv
Для файлов, разделенных табуляцией:
column -t -s $'\t' data.tsv
Для файлов с разделителями-пробелами:
column -t -s "|" data.txt
Обработка пустых строк в Linuc
По умолчанию column игнорирует пустые строки во входных данных. Рассмотрим следующий CSV-файл с пустыми строками:
column -t -s ";" dummy.txt
В Debian/Ubuntu для сохранения пустых строк используйте флаг -e:
column -e -t -s "," dummy.txt # только для Debian/Ubuntu
Пользовательские разделители вывода в Linux
По умолчанию в качестве разделителя вывода используются два пробела. Чтобы изменить это значение, используйте флаг -o (только для систем на базе RHEL):
column -t -s "," -o " | " dummy.txt # только для RHEL
Это создает формат вывода с разделителями в виде вертикальной черты, который удобен при подготовке данных к дальнейшей обработке.
В качестве разделителя можно использовать любую строку:
column -t -s ":" -o " → " /etc/passwd | head -5 # Разделитель со стрелкой в Юникоде column -t -s "," -o "||" data.csv # Двойной разделитель
Преобразование строк в столбцы в Linux
Флаг -x преобразует строки в столбцы, заполняя их по горизонтали перед переходом к следующей строке:
column -x fillcols.txt
Это особенно удобно при компактном отображении списков элементов:
ls /usr/bin | column -x
При запуске столбца без флагов по умолчанию используется поведение -x .
Работа с выводом команд
Column отлично справляется с форматированием вывода команд на лету.
Форматирование вывода df.
df -h | column -t
Форматирование вывода ps.
ps aux | column -t
Создание быстрых таблиц на основе данных.
echo -e "Name,Age,City\nAndreyEx,42,MSC\nAlex,31,KR" | column -t -s ","
Результат:
Name Age City AndreyEx 42 MSC Alex 31 KR
Форматирование пар «ключ-значение» в стиле JSON
При работе с парами «ключ-значение»:
column -t -s "=" config.ini
Переменные среды в удобном для чтения формате:
env | column -t -s "="
Указание ширины столбца
Управляйте шириной вывода с помощью переменной окружения COLUMNS:
COLUMNS=80 column -t -s ":" /etc/passwd | head -5
Команда column автоматически подстраивается под ширину вашего терминала:
echo $COLUMNS # Проверка текущей ширины терминала
При изменении размера терминала column соответствующим образом корректируется его вывод. Сравните эти примеры с терминалами разной ширины:
column -t -s ":" /etc/passwd | head -5
Расширенное форматирование таблиц (util-linux 2.23+)
В современных версиях column доступны дополнительные параметры форматирования таблиц:
Укажите, какая строка является заголовком:
column -t -s "," -N "Имя, возраст, город" data.csv
Выравнивание столбцов по правому краю
column -t -s "," -R 2,3 data.csv # Выравнивание по правому краю столбцов 2 и 3
Усекать столбцы
column -t -s ":" -T 1,6 /etc/passwd # Усечение столбцов 1 и 6
Сочетание с другими командами
Column отлично работает в конвейерах:
# Форматирование вывода awk
awk -F: '{print $1,$3,$6}' /etc/passwd | column -t
# Форматирование вывода cut
cut -d: -f1,3,6 /etc/passwd | column -t -s ":"
# Форматирование вывода grep
grep -v "^#" /etc/services | column -t
Создавайте форматированные отчеты на основе данных:
(echo "USER,CPU%,MEM%,COMMAND"; ps aux | awk '{print $1","$3","$4","$11}' | tail -n +2) | column -t -s ","
Команда column преобразует беспорядочные данные в удобные для чтения таблицы с минимальными усилиями.
Независимо от того, очищаете ли вы CSV-файлы, форматируете ли файлы конфигурации или делаете вывод команд более удобным для восприятия, команда column обеспечивает гибкость, необходимую для эффективного представления данных.
А как вы используете команду column? Поделитесь своими примерами в комментариях ниже.
Редактор: AndreyEx




