Командная строка CSV-просмотрщик?

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

Ответ 1

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

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

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

Ответ 2

Вы можете установить csvtool (на Ubuntu) с помощью

sudo apt-get install csvtool

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

csvtool readable filename | view -

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

Ответ 3

Посмотрите 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.

Ответ 4

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

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

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

Ответ 7

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

Ответ 8

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

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

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

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

csview <filename>

Ответ 9

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

Ответ 10

Я использовал ответ pisswillis в течение длительного времени.

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
}

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

Ответ 11

tblless в пакете Tabulator обертывает команду unix column, а также выравнивает числовые столбцы.

Ответ 12

Здесь (возможно, слишком) простой вариант:

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

Ответ 13

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

csvtopretty filename.csv | less -S

Ответ 14

Я написал этот 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

Ответ 15

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

Ответ 16

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

[sudo -H] pip3 install tablign

а также

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

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

Ответ 17

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

viewtab filename.csv

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

script и как его установить:

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

Ответ 18

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

Просто загрузите и разместите на своем пути. Использование похоже на

csv2ascii.py [options] csv-file-path

Преобразование csv файла в csv-file-path в ascii-форму, возвращающую результат на стандартный вывод. Если csv-file-path= '-', то прочитайте из stdin.

Параметры:

  -h, --help            show this help message and exit
  -w WIDTH, --width=WIDTH
                        Width of ascii output
  -c COLUMNS, --columns=COLUMNS
                        Only display this number of columns

Ответ 19

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

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