Как навести порядок в консольном выводе CSV без боли и лишних движений
Бывало такое: открываешь в терминале тяжелый лог в формате CSV или выгрузку из базы, а там — каша? Текст слипается, колонки едут, а чтобы понять, где заканчивается заголовок и начинается контент, приходится щуриться. Можно, конечно, закинуть файл в Excel или Google Таблицы, но это долго и выбивает из потока.
Недавно наткнулся на проект tennis. Это маленькая утилита на Zig, которая делает ровно одну вещь: превращает сырой CSV (и не только) в опрятные, читаемые таблицы прямо в консоли. Автор явно вдохновлялся современными инструментами вроде bat или nushell, поэтому результат выглядит очень достойно.
Что умеет эта штука
Главная фишка tennis — автоматизация. Вам не нужно указывать разделитель или подстраивать ширину колонок вручную. Утилита сама понимает, что перед ней: классический CSV, TSV с табуляциями или файл с разделителями-точками с запятой.
Вот что мне особенно приглянулось:
- Умные темы. Инструмент определяет фоновый цвет вашего терминала. Если у вас светлая тема — таблица будет светлой, если темная — подстроится под темную. Никакого выжигания глаз неоновыми цветами на белом фоне.
- Автоформат чисел. Если в колонке лежат цены или ID, tennis выровняет их по правому краю и добавит разделители разрядов. Мелочь, а читать финансовые отчеты становится в разы проще.
- Режим Peek. Это, пожалуй, самая полезная команда для быстрой оценки данных. Вместо того чтобы вываливать весь файл,
--peekпокажет структуру: сколько в файле строк, какие типы данных в колонках и пару примеров строк для понимания контекста.
Не только CSV
Хотя название намекает на работу с текстом, tennis на удивление всеяден. Он спокойно переваривает JSON и JSONL (NDJSON). Если скормить ему обычный JSON-объект, он превратит пары ключ-значение в строки таблицы.
Есть даже базовая поддержка SQLite. Если нужно быстро глянуть содержимое таблицы в базе, не заходя в интерактивный режим sqlite3, можно просто натравить утилиту на файл БД. Она сама выберет таблицу или позволит указать нужную через флаг --table.
Работа с данными на лету
Это не просто «вьювер». Внутри зашиты базовые инструменты манипуляции данными, которые избавляют от написания длинных цепочек из awk и sed:
- Сортировка и фильтрация. Можно отсортировать вывод по конкретной колонке (
--sort) или быстро отфильтровать строки по вхождению текста (--filter). - Выбор колонок. Если в CSV тридцать столбцов, а вам нужны только два, флаги
--selectили--deselectспасают ситуацию. - Оформление. Для любителей эстетики есть «зебра» (чередование цвета строк), разные стили границ (скругленные, двойные, тонкие) и нумерация строк.
Почему Zig
Автор отдельно отмечает, что проект написан на Zig. Для пользователя это означает две вещи: утилита весит копейки и работает мгновенно. Интересная деталь для разработчиков — модуль termbg.zig. Оказывается, надежно определить цвет фона терминала — та еще задача, и в экосистеме Zig готовых решений до этого момента практически не было. Автор реализовал это сам, подсмотрев логику в проектах на Rust и Go.
Как попробовать
Если вы на macOS, ставится одной командой через Brew:
brew install gurgeous/tap/tennis
Для Linux есть готовые бинарники в релизах на GitHub. А если хочется собрать самому, процесс стандартный для Zig-проектов: zig build — и готово.
Стоит ли ставить
Если вы часто работаете с данными в терминале и вам надоело смотреть на «сырой» текст, tennis — отличный кандидат в папку bin. Он не пытается заменить полноценные процессоры данных вроде miller или qsv, но как ежедневный инструмент для быстрого просмотра («глянуть, что там внутри») справляется на отлично.
Особенно рекомендую попробовать режим --peek. Часто только его одного достаточно, чтобы понять, тот ли файл вы открыли и почему в нем поехала разметка.
Единственный нюанс — проект свежий (версия 0.4.0), так что на гигантских файлах в несколько гигабайт может вести себя не так бодро, как специализированные инструменты. Но для повседневных задач конфигов и логов — самое то.