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.


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.


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.


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.


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)

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 .


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.


9

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


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>


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.



3

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

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

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 )


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


2

Usando o TxtSushi, você pode:

csvtopretty filename.csv | less -S

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

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


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


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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.