Кто-нибудь знает о средстве просмотра CSV из командной строки для Linux/OS X? Я думаю о чем-то вроде less
, но это делает столбцы более удобочитаемыми. (Мне было бы неплохо открыть его с помощью OpenOffice Calc или Excel, но это слишком мощно для простого просмотра данных, как мне нужно.) Было бы здорово иметь горизонтальную и вертикальную прокрутку.
Просмотр табличного файла, такого как CSV, из командной строки
Ответы (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
, так как вторая запятая уже соответствует.
column
. Я закончил тем, что сделал это коротким сценарием оболочки (большая его часть - это шаблон, как мне его использовать? и код проверки ошибок). github.com/benjaminoakes/utilities/blob/master/view-csv
- person Benjamin Oakes; 16.11.2010
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
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
sed
: s/^,/, /
и s/,$/, /
. Тогда последняя команда: sed 's/,,/, ,/g;s/,,/, ,/g;s/^,/, /;s/,$/, /' data.csv | column -s, -t
- person yuzeh; 07.10.2016
zsh: no matches found: -#2
- person varepsilon; 02.08.2018
column -s; -t
вместо column -s, -t
.
- person Akshay Gaur; 08.08.2018
cat data.csv | column -t, -s | less
только что стер пример файла .csv, поставив ‹ не в ту сторону.
- person Phlebass; 14.01.2019
tail -f
?
- person Jeppe; 27.02.2020
column -tns, cities.csv | nl | awk '1; {gsub(".","─")}1' | less -#10 -S
- person webh; 05.08.2020
-s
не является жадным и не будет объединять пустые столбцы.
- person Pan P; 19.11.2020
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, доступного только для чтения, даже если у вас есть некоторые ячейки с очень длинными значениями.
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.
pip install csvkit
. Наслаждаться!
- person gloriphobia; 25.10.2017
brew install csvkit
- person Anshul Sahni; 07.12.2020
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 для визуализации любых табличных данных (например, списка списков)
Пакет nodejs tecfu/tty-table может быть установлен глобально сделать именно это:
apt-get install nodejs
npm i -g tty-table
cat data.csv | tty-table
Он также может обрабатывать потоки.
Для получения дополнительной информации см. для использования терминала здесь.
xsv — это больше, чем средство просмотра. Я рекомендую его для большинства задач CSV в командной строке, особенно при работе с большими наборами данных.
Ответ Ofri дает вам все, что вы просили. Но... если вы не хотите запоминать команду, вы можете добавить ее в свой ~/.bashrc (или аналогичный):
csview()
{
local file="$1"
sed "s/,/\t/g" "$file" | less -S
}
Это точно так же, как ответ Ofri, за исключением того, что я обернул его в функцию оболочки и использую параметр less -S
, чтобы остановить перенос строк (делает less
более похожим на office/oocalc).
Откройте новую оболочку (или введите source ~/.bashrc
в вашей текущей оболочке) и запустите команду, используя:
csview <filename>
Я долгое время использовал ответ Писвиллиса.
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
}
Причина, по которой он работает лучше для меня, заключается в том, что он лучше обрабатывает широкие столбцы.
Мой проект FOSS CSVfix позволяет отображать файлы CSV в формате таблицы "ASCII art".
Вот (наверное слишком) простой вариант:
sed "s/,/\t/g" filename.csv | less
tblless
в пакете Tabulator заключает в себе команду unix column
, а также выравнивает числовые столбцы.
Еще один многофункциональный инструмент для работы с CSV (и не только): Miller а>. Судя по его собственному описанию, это похоже на awk, sed, cut, join и sort для индексированных по именам данных, таких как CSV, TSV и табличный JSON. (ссылка на репозиторий github: https://github.com/johnkerl/miller)
Я создал 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].
tablign
. Исправлено в описании.
- person Nico Schlömer; 01.12.2018
Я написал этот 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
С помощью TxtSushi вы можете:
csvtopretty filename.csv | less -S
Табвью действительно хорош. Работал с файлами размером более 200 МБ, которые отображались хорошо, но с ошибками в LibreOffice, а также с плагином csv в gvim.
Версия Anaconda доступна здесь: https://anaconda.org/bioconda/tabview.
Я написал скрипт viewtab на Groovy всего за эта цель. Вы вызываете его так:
viewtab filename.csv
По сути, это сверхлегкая электронная таблица, которую можно вызывать из командной строки, она обрабатывает CSV-файлы и файлы, разделенные табуляцией, может читать ОЧЕНЬ большие файлы, которые Excel и Numbers подавляют, и работает очень быстро. Это не командная строка в том смысле, что она предназначена только для текста, но она не зависит от платформы и, вероятно, подойдет многим людям, которые ищут решение проблемы быстрой проверки большого количества CSV-файлов при работе в среде командной строки. .
Скрипт и как его установить описаны здесь:
http://bayesianconspiracy.blogspot.com/2012/06/quick-csvtab-file-viewer.html
В 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