Trabalho com arquivos CSV e, às vezes, preciso verificar rapidamente o conteúdo de uma linha ou coluna na linha de comando. Em muitos casos cut
, head
, tail
, e amigos vão fazer o trabalho; no entanto, o corte não pode lidar facilmente com situações como
"this, is the first entry", this is the second, 34.5
Aqui, a primeira vírgula faz parte do primeiro campo, mas cut -d, -f1
discorda. Antes de escrever uma solução, eu me perguntava se alguém sabia de uma boa ferramenta que já existe para esse trabalho. Teria que, no mínimo, conseguir manipular o exemplo acima e retornar uma coluna de um arquivo formatado em CSV. Outros recursos desejáveis incluem a capacidade de selecionar colunas com base nos nomes de coluna fornecidos na primeira linha, suporte para outros estilos de cotação e suporte para arquivos separados por tabulação.
Se você não conhece essa ferramenta, mas tem sugestões sobre a implementação de um programa no Bash, Perl ou Python ou outras linguagens de script comuns, não me importo com essas sugestões.
fonte
Provavelmente estou um pouco atrasado, mas há outra ferramenta que vale a pena mencionar: csvkit
http://csvkit.readthedocs.org/
Possui muitas ferramentas de linha de comando que podem:
cut
,grep
,sort
e outros, mas CSV-aware,fonte
Parece um trabalho para Perl
Text::CSV
.Consulte a documentação para saber como lidar com nomes de colunas. O separador e o estilo de citação podem ser ajustados com os parâmetros para
new
. Veja tambémText::CSV::Separator
para adivinhação do separador.fonte
(t)csh
esse comando funcionaria bem no prompt do seu shell. Você sempre pode unir essas linhas se desejar em uma linha. nova linha é geralmente apenas como espaço na sintaxe Perl como em C.-e
cria um loop implícito).Eu encontrei o csvfix, uma ferramenta de linha de comando faz o trabalho bem. Você precisará fazer você mesmo, no entanto:
http://neilb.bitbucket.org/csvfix
Ele faz tudo o que você esperaria, ordenar / selecionar colunas, dividir / mesclar e muitos que você não gostaria de gerar inserções SQL a partir de dados CSV e diferenciar dados CSV.
fonte
Se você deseja usar a linha de comando (e não criar um programa inteiro para fazer o trabalho), gostaria de usar linhas , um projeto no qual estou trabalhando: é uma interface de linha de comando para dados tabulares, mas também uma biblioteca Python para usar em seus programas. Com a interface da linha de comandos, você pode imprimir praticamente qualquer dado em CSV, XLS, XLSX, HTML ou qualquer outro formato de tabela suportado pela biblioteca com um comando simples:
Se
myfile.csv
é assim:Em seguida, as linhas imprimirão o conteúdo de uma maneira bonita, assim:
Instalando
Se você é um desenvolvedor Python e já tem
pip
instalado em sua máquina, basta executar dentro de um virtualenv ou comsudo
:Se você estiver usando o Debian:
Outros recursos interessantes
Convertendo Formatos
Você pode converter entre qualquer formato suportado:
Consulta
Sim, você pode usar o SQL em um arquivo CSV:
Também é possível converter a saída da consulta em um arquivo em vez de stdout usando o
--output
parâmetroComo uma biblioteca Python
Você também pode nos seus programas Python:
Espero que goste!
fonte
R não é minha linguagem de programação favorita, mas é boa para coisas assim. Se o seu arquivo csv for
Dentro do tipo de intérprete R
Em relação aos seus outros pedidos, para "a capacidade de selecionar colunas com base nos nomes de coluna fornecidos na primeira linha", consulte
Para "suporte a outros estilos de citação", consulte o
quote
argumento read.csv (e funções relacionadas). Para "suporte a arquivos separados por tabulação", consulte osep
argumento read.csv (definidosep
como '\ t').Para mais informações, consulte a ajuda online.
fonte
Rscript
(parte da distribuição R básica) ou o pacote adicionallittler
. Você pode fazer#!/usr/bin/env Rscript
ou similar.Eu usei o csvtool uma vez e me poupou muito tempo e problemas. Chamadas a partir do shell.
http://caml.inria.fr/cgi-bin/hump.en.cgi?contrib=447
fonte
Miller é outra ferramenta interessante para manipular dados baseados em nomes, incluindo CSV (com cabeçalhos). Para extrair a primeira coluna de um arquivo CSV, sem se preocupar com o nome, faça algo como
fonte
awk
, mas altamente compatível com DSV.Ou você pode tentar um pouco de mágica awk . No entanto, não sou um bom usuário do awk e não posso confirmar se isso funcionaria corretamente e como fazê-lo.
fonte
Veja também o GNU Recutils e as ferramentas de esmagamento .
(via http://www.reddit.com/r/commandline/comments/mfcu9/anyone_using_gnu_recutils_is_it_outdatedsuperceded/ )
fonte
Para usar python na linha de comando, você pode conferir pythonpy ( https://github.com/Russell91/pythonpy ):
fonte
tente "csvtool" este pacote, é uma ferramenta útil de linha de comando para lidar com arquivos CSV
fonte
cissy também fará o processamento de linha de comando csv. Está escrito em C (pequeno / leve) com pacotes rpm e deb disponíveis para a maioria das distribuições.
Usando o exemplo:
ou
ou
fonte
Há também uma biblioteca Curry para leitura / gravação de arquivos no formato CSV : CSV .
fonte
O Ferramentas de texto estruturado do github repo possui uma lista útil de ferramentas relevantes de linha de comando do Linux. Em particular, a seção Valores Separados por Delimitador lista várias ferramentas compatíveis com CSV que suportam diretamente as operações solicitadas.
fonte
Eu recomendaria xsv - Um rápido conjunto de ferramentas de linha de comando CSV escrito em Rust ( Github ).
Escrito pelo autor de Ripgrep .
Destaque em Como tornamos nosso processamento CSV 142x mais rápido ( segmento do Reddit ).
fonte
Uma das melhores ferramentas é Miller ( http://johnkerl.org/miller/doc/index.html ). É como awk, sed, recortar, ingressar e classificar para dados indexados por nome, como CSV, TSV e JSON tabular.
Exemplo
da-te
Se você quer um TSV
dá a você (é possível remover o cabeçalho)
Se você deseja a primeira e a terceira coluna, altere sua ordem
da-te
fonte
Se você deseja uma ferramenta visual / interativa no terminal, recomendo sinceramente o VisiData.
Possui tabelas de frequência (mostradas acima), pivô, fusão, gráficos de dispersão, filtragem / computação usando Python e muito mais.
Você pode passar arquivos csv assim
vd hello.csv
Há opções específicas CSV:
--csv-dialect
,--csv-delimiter
,--csv-quotechar
, e--csv-skipinitialspace
para aperfeiçoá-lo manipulação de arquivos CSV.fonte
Uma solução awk
fonte