Visualizador de CSV da linha de comando? [fechadas]

308

Alguém conhece um visualizador de CSV de linha de comando para Linux / OS X? Estou pensando em algo assim, lessmas que espaça as colunas de uma maneira mais legível. (Eu ficaria bem em abri-lo com o OpenOffice Calc ou Excel, mas isso é dominado demais para apenas olhar os dados como eu preciso.) Ter rolagem horizontal e vertical seria ótimo.

Benjamin Oakes
fonte
Como não posso responder: o SC-IM é um visualizador e editor de CLI para tabelas que também podem abrir o CSV. github.com/andmarti1424/sc-im
12431234123412341234123

Respostas:

441

Você também pode usar isso:

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

column é um programa unix padrão que é muito conveniente - encontra a largura apropriada de cada coluna e exibe o texto como uma tabela bem formatada.

Nota: sempre que houver campos vazios, você precisará colocar algum tipo de espaço reservado, caso contrário, a coluna será mesclada com as seguintes. O exemplo a seguir demonstra como usar sedpara inserir um espaço reservado:

$ 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

Observe que a substituição de ,,por , ,é feita duas vezes. Se você fizer isso apenas uma vez, 1,,,4se tornará 1, ,,4uma vez que a segunda vírgula já corresponde.

user437522
fonte
2
Eu realmente gosto dessa opção - é bom conhecer column. Acabei transformando este um script de shell curto (a maior parte é clichê "como faço para usá-lo?" E código de verificação de erro). github.com/benjaminoakes/utilities/blob/master/view-csv
Benjamin Oakes
24
A versão da coluna 'Debian GNU / Linux' possui a opção '-n': "Por padrão, o comando column mesclará vários delimitadores adjacentes em um único delimitador ao usar a opção -t; essa opção desabilita esse comportamento. Esta opção é uma extensão Debian GNU / Linux. "
klokop
5
Parece quebrar se você tiver valores de coluna (entre aspas) com vírgulas. Alguma idéia de como consertar isso?
TM.
3
de 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 17/06/2016
8
Infelizmente, se um valor contiver uma vírgula, ele será dividido mesmo que seja citado.
ffarquet
107

Você pode instalar csvtool(no Ubuntu) via

sudo apt-get install csvtool

e então execute:

csvtool readable filename | view -

Isso o tornará agradável e bonito dentro de uma instância do vim somente leitura, mesmo se você tiver algumas células com valores muito longos.

d_chall
fonte
2
Para aqueles que não estão nas distros da base do Debian, esta ferramenta parece se originar daqui: docs.camlcity.org/docs/godisrc/ocaml-csv-1.1.6.tar.gz Infelizmente, o link "homepage" está morto, e eu não vejo uma maneira fácil de baixar todo o arquivo de uma só vez.
Cincodenada
9
A ferramenta não pode manipular arquivos com 100Mb +
PedroSena
6
Esta ferramenta está disponível no ocaml-csvpacote baseno Centos7 para mim
Bryce Guinta
72

Dê uma olhada no csvkit . Ele fornece um conjunto de ferramentas que aderem à filosofia do UNIX (o que significa que são pequenas, simples, de propósito único e podem ser combinadas).

Aqui está um exemplo que extrai as dez cidades mais populosas da Alemanha do banco de dados gratuito Maxmind World Cities e exibe o resultado em um formato legível por console:

$ 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      |
-----------------------------------------------------

O Csvkit é independente da plataforma, porque está escrito em Python.

Kai Sternad
fonte
1
Funciona muito bem no meu MAC. Muito útil para ler arquivos grandes.
James Lim
4
Eu gosto do Csvkit. csvlook <nome do arquivo.csv> |
Sandeep
5
Para obter csvkit você pode apenas pip instalá-lo: pip install csvkit. Aproveitar!
gloriphobia
46

Tabview: python leve amaldiçoa o visualizador de arquivos CSV da linha de comando (e também outros dados tabulares do Python, como uma lista de listas) está aqui no Github

Recursos:

  • Python 2.7+, 3.x
  • Suporte Unicode
  • Visualização semelhante a uma planilha para visualizar facilmente dados tabulares
  • Navegação semelhante a Vim (h, j, k, l, g (em cima), G (em baixo), 12G, linha 12, m - marca, '- marca de goto, etc.)
  • Alternar linha de cabeçalho persistente
  • Redimensionar dinamicamente as larguras e lacunas da coluna
  • Classifique crescente ou decrescente por qualquer coluna. Ordem de ordem 'Natural' para valores numéricos.
  • Pesquisa de texto completo, ep para alternar entre os resultados da pesquisa
  • 'Enter' para visualizar o conteúdo completo da célula
  • Arranque o conteúdo da célula para a área de transferência
  • F1 ou? para atalhos de teclado
  • Também pode usar da linha de comando python para visualizar quaisquer dados tabulares (por exemplo, lista de listas)
Scott Hansen
fonte
1
Ótima ferramenta. Abriu um arquivo enorme que travou o csvtool e o openoffice. Muito rápido também.
19415 Leonardo
Após o 'pip install tabview' no Windows com sucesso, como inicio o programa? Eu posso usar 'tabview file.csv' no linux com êxito, mas o Windows parece não funcionar. Obrigado!
19415 Chris
Não acredito que o módulo de maldições esteja disponível no Windows. Desculpe! Pode haver um módulo de terceiros disponível, mas ainda não desenvolvi o Windows.
Scott Hansen
Obrigado pela explicação! Afinal, é uma ferramenta incrível!
19415 Chris
1
@CiroSantilli 事件 事件 2016 六四 事件 法轮功, infelizmente ainda não. Espero colocar algum tempo em tabview em breve ... está um pouco dormente por um tempo aqui. :(
Scott Hansen
22

O pacote nodejs tecfu / tty-table pode ser instalado globalmente para fazer exatamente isso:

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

tecfu / tty-table

Ele também pode lidar com fluxos.

Para mais informações, consulte os documentos para uso do terminal aqui .

user3751385
fonte
1
Por favor, deixe um motivo se você votar. Este pacote funciona e funciona bem.
user3751385
9
nodejs é uma plataforma de servidor da web. Você não deve recomendar alguém para cortar pão com uma serra elétrica.
max
23
node é um sistema de script de uso geral com ligações da CLI, qual é a diferença de usar um one-liner perl ou algo do CPAN?
Racheet
Eu realmente gosto dessa opção, mas quando a canalizo para menos, ela não parece correta. Você sabe se é necessário algo extra para fazê-lo funcionar com menos?
plafratt
Este pacote será interrompido se o arquivo contiver muitas colunas (em particular mais do que a largura horizontal da tela do terminal pode suportar) e não as alinhe adequadamente posteriormente.
gented
10

O xsv é mais do que um visualizador. Eu o recomendo para a maioria das tarefas CSV na linha de comando, especialmente ao lidar com grandes conjuntos de dados.

smartmic
fonte
9

Meu projeto FOSS CSVfix permite exibir arquivos CSV no formato de tabela "Arte ASCII".

Victor Sergienko
fonte
Exatamente o que eu estava procurando. Vou ter que tentar compilá-lo para OS X. (Você pode ter algumas manchas vindo em sua direção, quem sabe ...)
Benjamin Oakes
Eu os receberia muito. Um dos aspectos um pouco deprimente dos projetos de software livre é como poucas pessoas realmente contribuem com código. Claro, sou tão culpado disso quanto a próxima pessoa.
Por que seu projeto CSVfix não permite a navegação de repo? Tornar mais difícil a visualização do código por outras pessoas não aumenta a probabilidade de você receber contribuições, pois não?
Dirk Eddelbuettel
1
Pura preguiça da minha parte, receio. Além disso, fornecer um zip do código significa que qualquer pessoa pode obtê-lo - se eu apenas fornecesse acesso ao repositório, as pessoas teriam que ter o SVM ou Hg instalado. Se eu começar a receber patches, reconsiderei.
Última confirmação em 02/02/2015
Boris
8

A resposta da Ofri fornece tudo o que você pediu. Mas .. se você não quiser se lembrar do comando, poderá adicioná-lo ao seu ~ / .bashrc (ou equivalente):

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

Isso é exatamente o mesmo que a resposta de Ofri, exceto que eu a envolvi em uma função shell e estou usando a less -Sopção para interromper a quebra de linhas (fazless se comporte mais como um office / oocalc).

Abra um novo shell (ou digite source ~/.bashrcseu shell atual) e execute o comando usando:

csview <filename>

pisswillis
fonte
5
Isso não manipula vírgula entre aspas.
Cheng
7

Eu usei a resposta de pisswillis por um longo tempo.

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

Mas, em seguida, combinei um código que encontrei em http://chrisjean.com/2011/06/17/view-csv-data-from-the-command-line que funciona melhor para mim:

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

A razão pela qual funciona melhor para mim é que ele lida melhor com colunas largas.

Tom Weiss
fonte
4

tbllessno pacote Tabulator envolve o columncomando unix e também alinha colunas numéricas.

stefan.schroedl
fonte
3

Aqui está uma opção (provavelmente também) simples:

sed "s/,/\t/g" filename.csv | less
Ofri Raviv
fonte
2
Essa foi a minha primeira inclinação também. Mas você precisa inserir guias suficientes para corresponder ao valor mais longo da sua coluna ... Começou a ficar um pouco complicado e pensei "alguém já deve ter feito isso".
Benjamin Oakes
2
Você também está ignorando o fato de que vírgulas podem ser citadas e, portanto, não separadoras. (entre outras coisas)
Ariel Allon
3

Mais uma ferramenta multifuncional de manipulação de CSV (e não apenas): Miller . A partir de sua própria descrição, é como awk, sed, recortar, ingressar e classificar para dados indexados por nome, como CSV, TSV e JSON tabular. (link para o repositório do github: https://github.com/johnkerl/miller )

Nikos Alexandris
fonte
2

Eu escrevi este csv_view.sh para formatar CSVs na linha de comando, isso lê o arquivo inteiro para descobrir a largura ideal de cada coluna (requer perl, assume que não há vírgulas nos campos, também usa menos):


#!/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

Jean Vincent
fonte
2

Usando o TxtSushi, você pode:

csvtopretty filename.csv | less -S
Keith
fonte
Downvote por não ser um procedimento de instalação de uma linha. Eu não tenho o tempo para compilar este :( Se você poderia fornecer um pacote que seria fantástico..
masterxilo
@masterxilo não é um motivo válido para votar. Hoje, muitos pacotes exigem várias etapas para instalar. Além disso, provavelmente seria mais rápido instalar do que escrever o comentário.
Yuval Meshorer
2

Tabview é realmente bom. Trabalhou com mais de 200 MB de arquivos que apresentavam problemas com o LibreOffice e com o plugin csv no gvim.

A versão do Anaconda está disponível aqui: https://anaconda.org/bioconda/tabview

shankerj
fonte
2

Eu criei o tablign para esses (e outros) propósitos. Instale com

[sudo -H] pip3 install tablign

e

$ 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 ,

Também funciona se os dados estiverem separados por algo além de vírgulas. Mais importante, ele preserva os delimitadores para que você também possa usá-lo para estilizar suas tabelas ASCII sem sacrificar sua sintaxe [Markdown, CSV, LaTeX].

Nico Schlömer
fonte
Collecting tablify Could not find a version that satisfies the requirement tablify (from versions: ) No matching distribution found for tablify
Masterdilo #
@ masterxilo que eu havia renomeado para tablign. Corrigido na descrição.
Nico Schlömer 01/12/19
1
Perfeito, apenas funciona.
Masterdilo # 4/18
0

Eu escrevi um script, viewtab , no Groovy para esse fim. Você o invoca como:

viewtab filename.csv

É basicamente uma planilha super leve que pode ser chamada a partir da linha de comando, manipula arquivos separados por tabulações e CSV, pode ler arquivos MUITO grandes que o Excel e o Numbers usam e é muito rápida. Não é uma linha de comando no sentido de ser apenas texto, mas é independente da plataforma e provavelmente atenderá a muitas pessoas que procuram uma solução para o problema de inspecionar rapidamente muitos ou grandes arquivos CSV enquanto trabalha em um ambiente de linha de comando .

O script e como instalá-lo são descritos aqui:

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

James Durbin
fonte
0

Existe este pequeno script de linha de comando em python: https://github.com/rgrp/csv2ascii/blob/master/csv2ascii.py

Basta baixar e colocar no seu caminho. O uso é como

csv2ascii.py [options] csv-file-path

Converta o arquivo csv em csv-file-pathpara o formulário ascii retornando o resultado em stdout. E secsv-file-path = '-', leia a partir de stdin.

Opções:

  -h, --help mostra esta mensagem de ajuda e sai
  -w LARGURA, - largura = LARGURA
                        Largura da saída ascii
  -c COLUNAS, --colunas = COLUNAS
                        Exibir apenas este número de colunas
Rufus Pollock
fonte