Переглядач CSV командного рядка? [зачинено]


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

Зауважте, що заміна на ,,для , ,цього робиться двічі. Якщо ви зробите це лише один раз, 1,,,4це стане 1, ,,4з моменту, коли вже відповідна друга кома.


2
Мені дуже подобається цей варіант - про це добре знати column. Я в кінцевому підсумку створив цей короткий скрипт оболонки (більшість із них - це котлованна табличка "як я ним користуюся?" Та код перевірки помилок). github.com/benjaminoakes/utilities/blob/master/view-csv
Бенджамін Оукс

24
Версія стовпця 'Debian GNU / Linux' має опцію '-n': "За замовчуванням команда стовпців об'єднає кілька сусідніх роздільників в один роздільник при використанні параметра -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.
ezdazuzena

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 На жаль, посилання "домашня сторінка" мертве, і я не Я не бачу простий спосіб завантажити весь архів за один раз.
cincodenada

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: полегшений переглядач файлів CSV командного рядка python проклинає (а також інші табличні дані Python, як список списків) тут на Github

Особливості:

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

1
Чудовий інструмент. Відкрив величезний файл, який розбив csvtool та openoffice. Дуже швидко теж.
Леонардо

Після того, як 'pip install tabview' у Windows успішно, як запустити програму? Я можу використовувати "tabview file.csv" на Linux успішно, але Windows, здається, не працює. Дякую!
Кріс

Я не вірю, що модуль прокльонів доступний у 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 / tty-table

Він також може обробляти потоки.

Для отримання додаткової інформації дивіться документи про використання терміналів тут .


1
Будь ласка, залиште причину, якщо ви заявляєте. Цей пакет працює і працює добре.
user3751385

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

23
вузол - це сценарна система загального призначення з прив'язкою CLI, чим вона відрізняється від використання perl-вкладиша або чогось із CPAN?
Рахіт

Мені дуже подобається цей варіант, але коли я передаю його менше, він виглядає не так. Чи знаєте ви, чи потрібно щось додаткове, щоб воно працювало з меншими?
плафратт

Цей пакет розривається, якщо файл містить багато стовпців (зокрема, більше, ніж горизонтальна ширина екрана терміналу) і не вирівняє їх належним чином після цього.
поблагодарив

10

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


9

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


Саме те, що я шукав. Мені доведеться спробувати компілювати його для OS X. (Можливо, у вас з’являться якісь виправлення, хто знає ...)
Бенджамін Оукс

Я дуже вітаю їх. Одним із варіантів проектів FOSS є депресивний аспект - те, як мало хто насправді надає код. Звичайно, я в цьому так само винен, як і наступна людина.

Чому ваш проект CSVfix не дозволяє переглядати репо? Якщо зробити іншим складніше бачити код, це не робить більше ймовірним отримання внесків, чи не так?
Дірк Еддельбюттель

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

Останнє вчинення 2015-02-28
Борис

8

Відповідь Офрі дає вам все, про що ви просили. Але .. якщо ви не хочете запам’ятовувати команду, можете додати це до свого ~ / .bashrc (або еквівалент):

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

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

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

csview <filename>


5
Це не обробляє коми в лапках.
Чен

7

Я довго використовував відповідь 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
}

Причина для мене краще працює в тому, що вона обробляє широкі колони краще.



3

Ось (мабуть, занадто) простий варіант:

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

2
Це було і моє перше схильність. Але вам потрібно вставити достатню кількість вкладок, щоб відповідати найдовшому значенню для вашого стовпчика ... Почав трохи ускладнюватися, і я подумав, "хтось ще, мабуть, це вже зробив".
Бенджамін Оукс

2
Ви також нехтуєте тим фактом, що коти можуть бути цитованими, а отже, не роздільними. (серед іншого)
Аріель Аллон


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

Короткий переказ щодо того, що це не процедура встановлення однієї лінії. У мене немає часу, щоб скласти це :(. Якщо ви могли б надати пакунок, який був би дивним.
masterxilo

@masterxilo - це не вагомий привід подати заявку. На сьогоднішній день для багатьох пакунків потрібно встановити кілька кроків. Плюс до цього, можливо, було б швидше встановити, ніж написати коментар.
Ювал Мешорер

2

Tabview справді хороший. Працював з 200 + MB-файлами, які добре відображалися, які були баггі з LibreOffice, а також плагіном csv у gvim.

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


2

Я створив табличку для цих (та інших) цілей. Встановити за допомогою

[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, повертаючи результат у stdout. Якщо csv-file-path= '-', то читайте з stdin.

Параметри:

  -h, --допоможіть показати це довідкове повідомлення та вийти
  -w WIDTH, --width = WIDTH
                        Ширина виходу ascii
  -c КОЛОНІ, - стовпчики = COLUMNS
                        Показувати лише цю кількість стовпців
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.