Командная строка CSV Viewer? [закрыто]


308

Кто-нибудь знает о средстве просмотра CSV из командной строки для Linux / OS X? Я думаю о чем-то подобном, lessно это расставляет колонки более читабельным образом. (Я бы хотел открыть его с помощью OpenOffice Calc или Excel, но это слишком сильно для того, чтобы просто смотреть на данные, как мне нужно.) Было бы здорово иметь горизонтальную и вертикальную прокрутку.


Поскольку я не могу дать ответ: SC-IM является просмотрщиком CLI и редактором таблиц, которые также могут открывать CSV. github.com/andmarti1424/sc-im
12431234123412341234123

Ответы:


441

Вы также можете использовать это:

column -s, -t < somefile.csv | less -#2 -N -S

column это стандартная Unix-программа, которая очень удобна - она ​​находит соответствующую ширину каждого столбца и отображает текст в виде красиво отформатированной таблицы.

Примечание: если у вас есть пустые поля, вам нужно поместить в них какой-то заполнитель, иначе столбец объединяется со следующими столбцами. В следующем примере показано, как использовать sedдля вставки заполнителя:

$ cat data.csv
1,2,3,4,5
1,,,,5
$ sed 's/,,/, ,/g;s/,,/, ,/g' data.csv | column -s, -t
1  2  3  4  5
1           5
$ cat data.csv
1,2,3,4,5
1,,,,5
$ column -s, -t < data.csv
1  2  3  4  5
1  5
$ sed 's/,,/, ,/g;s/,,/, ,/g' data.csv | column -s, -t
1  2  3  4  5
1           5

Обратите внимание, что замена ,,for , ,выполняется дважды. Если вы сделаете это только один раз, 1,,,4станет, 1, ,,4поскольку вторая запятая уже совпадает.


2
Мне очень нравится этот вариант - это полезно знать column. Я закончил тем, что сделал это коротким сценарием оболочки (большая часть которого - шаблон «как я это использую?» И код проверки ошибок). github.com/benjaminoakes/utilities/blob/master/view-csv
Бенджамин Оукс

24
Версия столбца 'Debian GNU / Linux' имеет параметр -n: «По умолчанию команда column объединяет несколько смежных разделителей в один разделитель при использовании параметра -t; этот параметр отключает такое поведение. расширение Debian GNU / Linux. "
Клокоп

5
Кажется, он сломается, если у вас есть значения столбцов (в кавычках) с запятыми в них. Есть идеи как это исправить?
ТМ.

3
от man column:-n By default, the column command will merge multiple adjacent delimiters into a single delimiter when using the -t option; this option disables that behavior. This option is a Debian GNU/Linux extension.
ездазузена

8
К сожалению, если значение содержит запятую, оно будет разделено, даже если оно заключено в кавычки.
ffarquet

107

Вы можете установить csvtool(на Ubuntu) через

sudo apt-get install csvtool

и затем запустите:

csvtool readable filename | view -

Это сделает его красивым внутри экземпляра vim только для чтения, даже если у вас есть несколько ячеек с очень длинными значениями.


2
Для тех, кто не находится в дистрибутивах на основе Debian, этот инструмент, кажется, происходит отсюда: docs.camlcity.org/docs/godisrc/ocaml-csv-1.1.6.tar.gz К сожалению, ссылка на «домашнюю страницу» мертва, и я не Не вижу простой способ загрузить весь архив сразу.
Синкоденада

9
Инструмент не может обрабатывать файлы с 100Mb +
PedroSena

6
Этот инструмент доступен в ocaml-csvпакете baseдля меня в Centos7
Брайс Гуинта

72

Посмотрите на csvkit . Он предоставляет набор инструментов, которые соответствуют философии UNIX (то есть, они маленькие, простые, одноцелевые и могут комбинироваться).

Вот пример, который извлекает десять самых густонаселенных городов Германии из бесплатной базы данных Maxmind World Cities и отображает результат в читаемом с консоли формате:

$ csvgrep -e iso-8859-1 -c 1 -m "de" worldcitiespop | csvgrep -c 5 -r "\d+" 
  | csvsort -r -c 5 -l | csvcut -c 1,2,4,6 | head -n 11 | csvlook
-----------------------------------------------------
|  line_number | Country | AccentCity | Population  |
-----------------------------------------------------
|  1           | de      | Berlin     | 3398362     |
|  2           | de      | Hamburg    | 1733846     |
|  3           | de      | Munich     | 1246133     |
|  4           | de      | Cologne    | 968823      |
|  5           | de      | Frankfurt  | 648034      |
|  6           | de      | Dortmund   | 594255      |
|  7           | de      | Stuttgart  | 591688      |
|  8           | de      | Düsseldorf | 577139      |
|  9           | de      | Essen      | 576914      |
|  10          | de      | Bremen     | 546429      |
-----------------------------------------------------

Csvkit не зависит от платформы, потому что он написан на Python.


1
Отлично работает на моем MAC. Очень полезно для чтения больших файлов.
Джеймс Лим

4
Мне нравится Csvkit. csvlook <filename.csv> | менее -S
Сандип

5
Чтобы получить csvkit вы можете просто установить его пип: pip install csvkit. Наслаждайтесь!
Глорифобия

46

Tabview: облегченная программа Python curses для командной строки Просмотрщик файлов CSV (а также другие табличные данные Python, такие как список списков) находятся здесь на Github

Особенности:

  • Python 2.7+, 3.x
  • Поддержка Unicode
  • Табличное представление для удобной визуализации табличных данных
  • Vim-подобная навигация (h, j, k, l, g (вверху), G (внизу), 12G - строка 12, m - отметка, '- отметка перехода и т. Д.)
  • Переключить постоянную строку заголовка
  • Динамическое изменение ширины столбца и зазора
  • Сортировка по возрастанию или убыванию по любому столбцу. «Естественный» порядок сортировки числовых значений.
  • Полнотекстовый поиск, n и p для переключения между результатами поиска
  • «Enter» для просмотра всего содержимого ячейки
  • Янкировать содержимое ячейки в буфер обмена
  • F1 или? для сочетаний клавиш
  • Может также использоваться из командной строки python для визуализации любых табличных данных (например, list-of-lists)

1
Отличный инструмент. Открыл огромный файл, который вылетал csvtool и openoffice. Очень быстро тоже.
Леонардо

После успешного запуска pip install tabview в Windows, как запустить программу? Я могу использовать 'tabview file.csv' на Linux успешно, но Windows, кажется, не работает. Спасибо!
Крис

Я не верю, что модуль curses доступен в Windows. Сожалею! Может быть доступен сторонний модуль, но я не занимался разработкой для Windows.
Скотт Хансен

Спасибо за объяснение! Это потрясающий инструмент в конце концов!
Крис

1
@CiroSantilli 事件 事件 2016 六四 事件 法轮功, к сожалению, пока нет. Я надеюсь в ближайшее время уделить время просмотру табуляции ... это было довольно долго бездействующим. :(
Скотт Хансен


22

Пакет nodejs tecfu / tty-table может быть установлен глобально, чтобы сделать именно это:

apt-get install nodejs
npm i -g tty-table
cat data.csv | tty-table

tecfu / терминал стол

Он также может обрабатывать потоки.

Для получения дополнительной информации см. Документацию по использованию терминала здесь .


1
Пожалуйста, оставьте причину, если вы отрицаете. Этот пакет работает и работает хорошо.
user3751385

9
nodejs - это платформа веб-сервера. Не следует рекомендовать кому-то резать хлеб бензопилой.
максимум

23
node - это система сценариев общего назначения с привязками CLI, чем она отличается от использования perl-однострочного или чем-то из CPAN?
Рашит

Мне действительно нравится этот вариант, но когда я использую его по меньшей мере, он выглядит неправильно. Вы знаете, требуется ли что-то дополнительное, чтобы оно работало с меньшими затратами?
Плафратт

Этот пакет разрывается, если файл содержит много столбцов (в частности, больше, чем может обрабатывать горизонтальная ширина экрана терминала), и после этого не выравнивает их должным образом.
gented

10

XSV больше, чем зритель. Я рекомендую его для большинства задач CSV в командной строке, особенно при работе с большими наборами данных.


9

Мой проект FOSS CSVfix позволяет отображать файлы CSV в табличном формате «ASCII art».


Именно то, что я искал. Мне придется попробовать скомпилировать его для OS X. (У вас могут быть некоторые исправления, кто знает ...)
Бенджамин Оукс

Я бы очень приветствовал их. Одна из причин, вызывающих уныние аспекты проектов FOSS, заключается в том, как мало людей на самом деле предоставляют код. Конечно, я виновен в этом так же, как и следующий человек.

Почему ваш проект CSVfix не позволяет просматривать репо? Если вам будет труднее видеть код, это не повысит вероятность получения вами вклада, не так ли?
Дирк Эддельбюттель

1
Боюсь, лень с моей стороны. Кроме того, предоставление zip кода означает, что любой может получить его - если бы я только предоставил доступ к репо, людям пришлось бы устанавливать SVM или Hg. Если бы я начал получать патчи, я бы пересмотрел.

Последний коммит 2015‑02‑28
Борис

8

Ответ Ofri дает вам все, что вы просили. Но ... если вы не хотите помнить команду, вы можете добавить это в ваш ~ / .bashrc (или эквивалентный):

csview()
{
local file="$1"
sed "s/,/\t/g" "$file" | less -S
}

Это то же самое, что и ответ Офри, за исключением того, что я обернул его в функцию оболочки и использую less -Sопцию, чтобы остановить перенос строк (делаетless поведение более похожим на office / oocalc).

Откройте новую оболочку (или введите source ~/.bashrcтекущую оболочку) и выполните команду, используя:

csview <filename>


5
Это не обрабатывает запятую в кавычках.
Ченг

7

Я долго пользовался ответом Писвиллиса.

csview()
{
    local file="$1"
    sed "s/,/\t/g" "$file" | less -S
}

Но затем объединил некоторый код, который я нашел на http://chrisjean.com/2011/06/17/view-csv-data-from-the-command-line, который лучше работает для меня:

csview()
{
    local file="$1"
    cat "$file" | sed -e 's/,,/, ,/g' | column -s, -t | less -#5 -N -S
}

Причина, по которой он работает лучше для меня, заключается в том, что он лучше обрабатывает широкие столбцы.



3

Вот (возможно, тоже) простой вариант:

sed "s/,/\t/g" filename.csv | less

2
Это было и мое первое желание. Но вам нужно вставить достаточное количество вкладок, чтобы соответствовать наибольшему значению для вашего столбца ... Начал становиться немного сложнее, и я подумал: "Кто-то другой, должно быть, уже сделал это".
Бенджамин Оукс

2
Вы также игнорируете тот факт, что запятые могут быть заключены в кавычки и, следовательно, не разделители. (среди прочего)
Ариэль Аллон

3

Еще один многофункциональный инструмент манипуляции CSV (и не только): Миллер . Исходя из собственного описания, он похож на awk, sed, cut, join и sort для индексированных по имени данных, таких как CSV, TSV и табличный JSON. (ссылка на репозиторий github: https://github.com/johnkerl/miller )


2

Я написал этот файл csv_view.sh для форматирования CSV из командной строки, он читает весь файл, чтобы определить оптимальную ширину каждого столбца (требуется perl, предполагается, что в полях нет запятых, также используется меньше):


#!/bin/bash

perl -we '
  sub max( @ ) {
    my $max = shift;

    map { $max = $_ if $_ > $max } @_;
    return $max;
  }

  sub transpose( @ ) {
    my @matrix = @_;
    my $width  = scalar @{ $matrix[ 0 ] };
    my $height = scalar @matrix;

    return map { my $x = $_; [ map { $matrix[ $_ ][ $x ] } 0 .. $height - 1 ] } 0 .. $width - 1;
  }

  # Read all lines, as arrays of fields
  my @lines = map { s/\r?\n$//; [ split /,/ ] } ;

  my $widths =
    # Build a pack expression based on column lengths
    join "",

    # For each column get the longest length plus 1
    map { 'A' . ( 1 + max map { length } @$_ ) }

    # Get arrays of columns
    transpose

    @lines
  ;

  # Format all lines with pack
  map { print pack( $widths, @$_ ) . "\n" } @lines;
' $1 | less -NS


2

Используя TxtSushi вы можете сделать:

csvtopretty filename.csv | less -S

Downvote за то, что не является процедурой установки в одну строку У меня нет времени, чтобы скомпилировать это :(. Если бы вы могли предоставить пакет, который был бы потрясающим.
masterxilo

@masterxilo, это не веская причина, чтобы понизить голос. Многие пакеты сегодня требуют несколько шагов для установки. Кроме того, это, вероятно, будет быстрее установить, чем написать комментарий.
Юваль Мешорер

2

Tabview действительно хорош. Работал с более чем 200 МБ файлами, которые отображались с ошибками в LibreOffice, а также с плагином csv в gvim.

Версия Anaconda доступна здесь: https://anaconda.org/bioconda/tabview


2

Я создал tablign для этих (и других) целей. Установить с

[sudo -H] pip3 install tablign

и

$ cat test.csv
Header1,Header2,Header3
Pizza,Artichoke dip,Bob's Special of the Day
BLT,Ham on rye with the works,
$ tablign test.csv
Header1 , Header2                   , Header3
Pizza   , Artichoke dip             , Bob's Special of the Day
BLT     , Ham on rye with the works ,

Также работает, если данные разделены чем-то еще, кроме запятых. Самое главное, что он сохраняет разделители, поэтому вы также можете использовать его для стилизации таблиц ASCII без ущерба для синтаксиса [Markdown, CSV, LaTeX].


Collecting tablify Could not find a version that satisfies the requirement tablify (from versions: ) No matching distribution found for tablify
masterxilo

@masterxilo Я переименовал это tablign. Исправлено в описании.
Нико Шлёмер

1
Отлично, просто работает.
masterxilo

0

Я написал скрипт, viewtab , в Groovy именно для этой цели. Вы вызываете это как:

viewtab filename.csv

По сути, это сверхлегкая электронная таблица, которая может быть вызвана из командной строки, обрабатывает файлы в формате CSV и табуляции, может читать ОЧЕНЬ большие файлы, которые задыхаются в Excel и Numbers, и очень быстрая. Это не командная строка в том смысле, что она предназначена только для текста, но она не зависит от платформы и, вероятно, подойдет для многих людей, которые ищут решение проблемы быстрой проверки большого или большого количества файлов CSV при работе в среде командной строки. ,

Сценарий и порядок его установки описаны здесь:

http://bayesianconspiracy.blogspot.com/2012/06/quick-csvtab-file-viewer.html


0

В python есть короткий скрипт командной строки: https://github.com/rgrp/csv2ascii/blob/master/csv2ascii.py

Просто скачайте и разместите на своем пути. Использование это как

csv2ascii.py [options] csv-file-path

Конвертировать CSV-файл в csv-file-pathформу ascii, возвращая результат на стандартный вывод. Если csv-file-path= '-', тогда читайте из стандартного ввода.

Параметры:

  -h, --help показать это справочное сообщение и выйти
  -w ШИРИНА, --width = ШИРИНА
                        Ширина вывода ascii
  -c КОЛОННЫ, --columns = КОЛОННЫ
                        Отображать только это количество столбцов
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.