Просмотр табличного файла, такого как CSV, из командной строки

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


person Benjamin Oakes    schedule 09.12.2009    source источник
comment
Поскольку я не могу дать ответ: SC-IM - это средство просмотра и редактирования CLI для таблиц, которое также может открывать CSV. github.com/andmarti1424/sc-im   -  person 12431234123412341234123    schedule 31.01.2020


Ответы (19)


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

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, так как вторая запятая уже соответствует.

person user437522    schedule 27.09.2010
comment
Мне очень нравится этот вариант — полезно знать о column. Я закончил тем, что сделал это коротким сценарием оболочки (большая его часть - это шаблон, как мне его использовать? и код проверки ошибок). github.com/benjaminoakes/utilities/blob/master/view-csv - person Benjamin Oakes; 16.11.2010
comment
Версия столбца Debian GNU/Linux имеет параметр '-n': по умолчанию команда столбца объединяет несколько соседних разделителей в один разделитель при использовании параметра -t; этот параметр отключает такое поведение. Эта опция является расширением Debian GNU/Linux. - person klokop; 18.11.2013
comment
Кажется, он ломается, если у вас есть значения столбцов (в кавычках) с запятыми. Есть идеи, как это исправить? - person TM.; 17.06.2014
comment
возможно, попробуйте преобразовать его в значения, разделенные табуляцией, например так: cat /tmp/foo.csv | gawk -vFS='^"|","|"$|",|,"|,' '{out=""; for(i=1;i<NF;i++) out=out"\t"$i; print out }' | column -t -s $'\t' - person coderofsalvation; 13.04.2015
comment
от 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. - person ezdazuzena; 17.06.2016
comment
Где можно получить копию версии столбца «Debian GNU/Linux» (для Mac)? - person Oliver Joseph Ash; 12.09.2016
comment
Чтобы сделать правильно для пустых полей first/last, вам на самом деле нужны еще две замены sed: s/^,/, / и s/,$/, /. Тогда последняя команда: sed 's/,,/, ,/g;s/,,/, ,/g;s/^,/, /;s/,$/, /' data.csv | column -s, -t - person yuzeh; 07.10.2016
comment
К сожалению, если значение содержит запятую, оно будет разделено, даже если оно заключено в кавычки. - person ffarquet; 22.02.2017
comment
Мои данные разделены точкой с запятой вместо запятой, и поэтому это не работает правильно. Есть ли способ быстро изменить разделитель? - person Pro Q; 19.06.2018
comment
Что этот хэш должен делать? Это какая-то магия, специфичная для bash? zsh: no matches found: -#2 - person varepsilon; 02.08.2018
comment
@ProQ Вы должны использовать column -s; -t вместо column -s, -t. - person Akshay Gaur; 08.08.2018
comment
На самом деле я предпочитаю, чтобы cat data.csv | column -t, -s | less только что стер пример файла .csv, поставив ‹ не в ту сторону. - person Phlebass; 14.01.2019
comment
Довольно критическая проблема, если пробелы важны для чтения csv. Например, если у вас нет значения для какой-либо строки, если у вас есть пробел (или нет) перед строкой, начинающейся с запятой, у вас будет совершенно другой вывод. Я бы очень хотел проголосовать за это, но это нарушение условий сделки. - person jasonleonhard; 27.10.2019
comment
Возможно, это решение: 1. удалить все пробелы 2. добавить пробел перед каждой запятой, перед которой нет значения, то есть строки, начинающейся с запятой, и когда запятая следует за другой запятой. Тогда у вас может быть надежный результат. - person jasonleonhard; 27.10.2019
comment
Это можно как-то сделать с tail -f? - person Jeppe; 27.02.2020
comment
Чтобы добавить горизонтальную линию после каждой строки csv в файле column -tns, cities.csv | nl | awk '1; {gsub(".","─")}1' | less -#10 -S - person webh; 05.08.2020
comment
Начиная с версии 2.23 параметр -s не является жадным и не будет объединять пустые столбцы. - person Pan P; 19.11.2020
comment
pspg (postgresql pager) - это полнофункциональная программа просмотра csv... Текущая версия просто работает pspg --csv -af file.csv. Скриншот см. на github.com/okbob/pspg. - person Lubo; 05.01.2021

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

sudo apt-get install csvtool

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

csvtool readable filename | view -

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

person d_chall    schedule 05.05.2010
comment
Для тех, кто не использует дистрибутивы на основе Debian, этот инструмент, похоже, взят отсюда: docs.camlcity.org/docs/godisrc/ocaml-csv-1.1.6.tar.gz К сожалению, ссылка на главную страницу не работает, и я не вижу простого способа скачать весь архив на ходу. - person cincodenada; 03.01.2014
comment
Инструмент не может обрабатывать файлы размером более 100 МБ. - person PedroSena; 08.08.2014
comment
Этот инструмент доступен из пакета ocaml-csv в пакете base для меня в Centos7 - person Bryce Guinta; 30.07.2016

Взгляните на 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.

person Kai Sternad    schedule 21.01.2012
comment
Отлично работает на моем MAC. Очень удобно для чтения больших файлов. - person James Lim; 11.12.2012
comment
Мне нравится CsvKit. csvlook ‹имя файла.csv› | меньше -S - person Sandeep; 15.04.2014
comment
Чтобы получить csvkit, вы можете просто установить его: pip install csvkit. Наслаждаться! - person gloriphobia; 25.10.2017
comment
Ссылка на базу данных Maxmind мертва - person Suzana; 27.10.2020
comment
Для установки также можно использовать brew, просто запустите brew install csvkit - person Anshul Sahni; 07.12.2020
comment
Также возможна установка с anaconda conda install csvkit - person Mykola Zotko; 27.04.2021

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

Функции:

  • Python 2.7+, 3.x
  • Поддержка Юникода
  • Представление в виде электронной таблицы для удобной визуализации табличных данных
  • Vim-подобная навигация (h,j,k,l, g(сверху), G(снизу), 12G перейти к строке 12, m - отметка, ' - перейти к отметке и т. д.)
  • Переключить постоянную строку заголовка
  • Динамическое изменение ширины столбцов и зазоров
  • Сортировка по возрастанию или убыванию по любому столбцу. «Естественная» сортировка числовых значений.
  • Полнотекстовый поиск, n и p для переключения между результатами поиска
  • «Введите», чтобы просмотреть полное содержимое ячейки
  • Скопировать содержимое ячейки в буфер обмена
  • F1 или ? для привязок клавиш
  • Также можно использовать из командной строки python для визуализации любых табличных данных (например, списка списков)
person Scott Hansen    schedule 17.01.2013
comment
Отличный инструмент. Открыл огромный файл, который грохнул csvtool и openoffice. Тоже очень быстро. - person Leonardo; 19.02.2015
comment
После успешного «pip install tabview» в Windows, как мне запустить программу? Я могу успешно использовать tabview file.csv в Linux, но окна, похоже, не работают. Спасибо! - person Chris; 19.03.2015
comment
Я не верю, что модуль curses доступен в Windows. Прости! Может быть доступен сторонний модуль, но я не занимался разработкой для Windows. - person Scott Hansen; 19.03.2015
comment
Спасибо вам за разъяснение! В конце концов, это потрясающий инструмент! - person Chris; 19.03.2015
comment
Я искал что-то подобное в течение многих лет! Это здорово, спасибо - person roadnottaken; 01.09.2016
comment
Без фильтрации :-( :-) github.com/firecat53/tabview/issues/126 - person Ciro Santilli 新疆再教育营六四事件ۍ 12.01.2017
comment
@CiroSantilli烏坎事件2016六四事件法轮功, к сожалению, еще нет. Я надеюсь скоро потратить некоторое время на просмотр вкладок ... некоторое время он здесь бездействовал. :( - person Scott Hansen; 28.02.2017
comment
curses предоставляется cygwin для пользователей Windows. - person Att Righ; 03.11.2017
comment
TabView теперь рекомендует VisiData, который является просто замечательным интерактивным средством просмотра CSV-файлов. jsvine.github.io/intro-to-visidata - person egrubbs; 09.07.2021

Если вы виммер, используйте плагин CSV, который просто красиво.

person Myer    schedule 07.06.2011

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

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

tecfu/tty-таблица

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

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

person user3751385    schedule 01.06.2016
comment
Пожалуйста, оставьте причину, если вы понизите голос. Этот пакет работает и работает хорошо. - person user3751385; 12.07.2016
comment
nodejs — это платформа веб-сервера. Не стоит рекомендовать кому-то резать хлеб бензопилой. - person max; 26.07.2016
comment
node - это система сценариев общего назначения с привязками CLI, чем она отличается от использования однострочного Perl или чего-то из CPAN? - person Racheet; 02.08.2016
comment
Мне очень нравится этот вариант, но когда я добавляю меньше, это выглядит неправильно. Знаете ли вы, требуется ли что-то дополнительное, чтобы заставить его работать с меньшими затратами? - person plafratt; 19.04.2020
comment
Этот пакет ломается, если файл содержит много столбцов (в частности, больше, чем может выдержать горизонтальная ширина экрана терминала) и после этого не выравнивает их должным образом. - person gented; 04.06.2020

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

person smartmic    schedule 17.04.2016
comment
на основе ржавчины. того же автора, что и ripgrep. Очень круто. - person Harry Moreno; 23.07.2020

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

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

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

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

csview <filename>

person pisswillis    schedule 09.12.2009
comment
Это не обрабатывает запятую в кавычках. - person Cheng; 06.06.2012

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

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
}

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

person Tom Weiss    schedule 25.06.2014

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

person Community    schedule 09.12.2009
comment
Именно то, что я искал. Я должен попытаться скомпилировать его для OS X. (Возможно, у вас появятся патчи, кто знает...) - person Benjamin Oakes; 10.12.2009
comment
Я бы очень приветствовал их. Одним из немного удручающих аспектов проектов FOSS является то, как мало людей на самом деле пишут код. Конечно, я виноват в этом так же, как и любой другой человек. - person ; 10.12.2009
comment
Почему ваш проект CSVfix не позволяет просматривать репо? Если другим будет сложнее увидеть код, это не повысит вероятность того, что вы получите вклад, не так ли? - person Dirk Eddelbuettel; 10.12.2009
comment
Боюсь, банальная лень с моей стороны. Кроме того, предоставление zip кода означает, что любой может получить его — если бы я только предоставил доступ к репо, людям пришлось бы установить SVM или Hg. Если бы я начал получать патчи, я бы передумал. - person ; 10.12.2009
comment
Последняя фиксация: 28 февраля 2015 г. - person Boris; 07.05.2020

Вот (наверное слишком) простой вариант:

sed "s/,/\t/g" filename.csv | less
person Ofri Raviv    schedule 09.12.2009
comment
Это была и моя первая склонность. Но вы должны вставить достаточно вкладок, чтобы соответствовать самому длинному значению для вашего столбца... Стало немного сложнее, и я подумал, что кто-то другой уже сделал это. - person Benjamin Oakes; 09.12.2009
comment
Вы также игнорируете тот факт, что запятые могут быть заключены в кавычки и, следовательно, не являются разделителями. (среди других вещей) - person Ariel Allon; 22.08.2018

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

person stefan.schroedl    schedule 14.04.2015


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

pip 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].

person Nico Schlömer    schedule 13.02.2018
comment
@masterxilo я переименовал его в tablign. Исправлено в описании. - person Nico Schlömer; 01.12.2018
comment
Идеально, просто работает. - person masterxilo; 04.12.2018
comment
Выглядит хорошо, но использует много памяти (пару ГБ) для файла размером 70 МБ. - person Nick Zinger; 22.09.2020

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

person Jean Vincent    schedule 13.09.2010

С помощью TxtSushi вы можете:

csvtopretty filename.csv | less -S
person Keith    schedule 06.05.2010
comment
Понижение за то, что это не процедура установки в одну строку. У меня нет времени компилировать это :(. Если бы вы могли предоставить пакет, это было бы здорово. - person masterxilo; 30.11.2018
comment
@masterxilo это не веская причина для понижения голоса. Сегодня для установки многих пакетов требуется несколько шагов. Плюс, скорее всего, будет быстрее установить, чем писать комментарий. - person Yuval Meshorer; 24.11.2019

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

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

person pratyahara    schedule 18.09.2018

Я написал скрипт viewtab на Groovy всего за эта цель. Вы вызываете его так:

viewtab filename.csv

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

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

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

person James Durbin    schedule 05.06.2012

В 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            show this help message and exit
  -w WIDTH, --width=WIDTH
                        Width of ascii output
  -c COLUMNS, --columns=COLUMNS
                        Only display this number of columns
person Rufus Pollock    schedule 10.11.2013