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.