Добавить в корзинуПозвонить
Найти в Дзене

CSV в терминале просто: утилита на 2 МБ

Есть стандартный сценарий работы с CSV в терминале: открываешь файл через cat, получаешь кашу. Пробуешь column -t - уже лучше, но цвета нет, длинные значения обрезаются криво, а про автоопределение разделителя можно забыть. Открываешь LibreOffice Calc - и вот ты уже ждёшь три секунды загрузки ради того, чтобы глянуть на 20 строк.
tennis решает именно эту задачу: берёт CSV (или TSV, или с
Оглавление

Таблицы в терминале
Таблицы в терминале

Есть стандартный сценарий работы с CSV в терминале: открываешь файл через cat, получаешь кашу. Пробуешь column -t - уже лучше, но цвета нет, длинные значения обрезаются криво, а про автоопределение разделителя можно забыть. Открываешь LibreOffice Calc - и вот ты уже ждёшь три секунды загрузки ради того, чтобы глянуть на 20 строк.

tennis решает именно эту задачу: берёт CSV (или TSV, или с разделителем-точкой с запятой - сам разберётся), рисует аккуратную таблицу с рамкой, цветами и выравниванием, вписывает её в ширину текущего окна терминала. Весит бинарник меньше двух мегабайт. Аккаунт не нужен.

Для кого это и для кого нет

Инструмент попадает в точку, если ты регулярно работаешь с данными в терминале: смотришь логи в CSV, проверяешь экспорты из баз, быстро оцениваешь структуру файла перед обработкой. Одна команда - и таблица читается.

Если нужно фильтровать, сортировать, джойнить или делать агрегации - tennis не для этого. Разработчик честно указывает в README альтернативы: qsv для трансформаций, miller для обработки, visidata для интерактивного исследования больших файлов. tennis - это про быстрый просмотр, не про аналитику.

Ещё один честный момент: проект молодой, версия 0.0.3 вышла в марте 2026-го. Часть заявленных фич - сортировка, выбор колонок, режим пейджера - пока в списке будущих задач, не в релизе. Устанавливаешь то, что есть сейчас, а не то, что обещано.

Что умеет из коробки

Автолейаут - главная фича. tennis смотрит на ширину окна терминала и подгоняет под неё таблицу: колонки сжимаются пропорционально, длинные значения обрезаются с многоточием. Никакой горизонтальной прокрутки.

Автотема - неочевидный плюс. Утилита определяет цвет фона терминала (светлый или тёмный) и выбирает подходящую цветовую схему. Это работает через собственный модуль termbg.zig - по словам автора, аналогов для Zig до этого не существовало. На практике: заголовки колонок подсвечены, числа выровнены по правому краю, читается комфортно.

Автоформат чисел - удобно, когда колонка содержит 1234567.89: tennis сам добавляет разделители тысяч и округляет до нужного количества знаков. Если форматирование мешает, отключается флагом --vanilla.

Автоопределение разделителя: запятая, табуляция, точка с запятой, пайп - утилита пробует сама. Можно переопределить через --delimiter.

Остальные опции - утилитарные: --head N и --tail N показывают первые или последние N строк (удобно для больших файлов), --row-numbers добавляет нумерацию, --title добавляет заголовок над таблицей, --border меняет стиль рамки (rounded, thin, double и другие варианты из Nushell).

Установка

На macOS - через Homebrew:

brew install gurgeous/tap/tennis

Одна строка, ничего лишнего.

На Linux - скачиваешь бинарник с релизов на GitHub и кладёшь в любую папку из $PATH. Автор рекомендует ~/.local/bin - разумно, не требует прав root. В папке extra/ репозитория лежат опциональные дополнения: bash/zsh-автодополнение и man-страница.

Сборка из исходников требует Zig и mise (менеджер версий инструментов). Если уже работаешь с Zig-проектами - стандартный процесс, ничего неожиданного.

Почему Zig - это не проблема

Zig - компилируемый системный язык, конкурент C в нише низкоуровневого кода. Для пользователя это означает одно: бинарник без зависимостей. Не нужен Python, Node, Ruby или что-то ещё. Скачал - запустил. Именно поэтому утилита весит меньше двух мегабайт и стартует мгновенно.

Молодость языка - честный риск. Экосистема меньше, разработчиков меньше, вероятность заброшенного репозитория статистически выше, чем у проекта на Go или Rust. 366 звёзд на GitHub - небольшая аудитория. Но MIT-лицензия и открытый код означают: даже если автор пропадёт, форкнуть и допилить под себя никто не запрещает.

Сравнение с тем, что уже есть

column -t из coreutils - есть везде, не требует установки, но не умеет цвета, автолейаут и форматирование чисел. Для разовой задачи достаточно, для регулярной работы - нет.

csvlens и tabiew - интерактивные TUI-вьюверы с навигацией, поиском, фильтрацией. Мощнее, но требуют взаимодействия. tennis - это cat, только красивый: одна команда, вывод в stdout, можно пайпить дальше.

visidata - другая лига. Полноценная интерактивная среда для анализа данных. Если файл большой и нужно в нём копаться - visidata. Если нужно быстро глянуть структуру перед следующим шагом в пайпе - tennis.

Спорное утверждение: большинству задач «посмотреть CSV в терминале» не нужен интерактивный вьювер. Нужен быстрый вывод в stdout, который можно передать в grep или less. tennis делает именно это - и не пытается стать чем-то большим.

Что раздражает

Проект в активной разработке, и это чувствуется. Сортировка строк, выбор конкретных колонок, режим --watch для обновляющихся файлов - всё это в списке «Future Work», не в релизе. Если ты читаешь это через полгода после публикации - проверь changelog, возможно, часть уже появилась.

Цвет включён по умолчанию и не отключается автоматически при пайпинге в файл. Если делаешь tennis data.csv > output.txt - в файл попадут ANSI-коды. Решается флагом --color off, но это надо помнить.

Документация минимальная: README, man-страница и --help. Для утилиты такого масштаба этого достаточно, но не рассчитывай на подробные примеры под каждый сценарий.

Если cat data.csv у тебя давно вызывает рефлекторное раздражение - tennis стоит попробовать. Бинарник, одна команда, никаких зависимостей. Либо зайдёт сразу, либо вернёшься к column -t через пять минут - ничего не потеряешь.

А что используешь для работы с CSV в терминале прямо сейчас - column -t, visidata или что-то ещё?

Источник: tennis on GitHub

🔔 Подписывайся на КликХак - разбираем инструменты, которые реально используются, а не те, что красиво выглядят в презентациях.