Editando arquivos CSV no Ubuntu [fechado]


9

Qual é uma boa maneira de editar arquivos CSV no Ubuntu?

Os arquivos são mais ou menos assim:

This,is,data,with,a,header
2,2,3,4,,
1,,3,,6,6
,5,3,5,5,6
1,2,,,,
1,2,3,4,8,6
1,,9,,5,9
-1,,3,4,5,6
1,2,0,4,5,6

Estou usando o OpenOffice, mas são necessários cerca de 5 cliques para desativar o comportamento padrão de citar todos os campos.

Gostaria de encontrar algo leve e fácil de usar que permita inserir / excluir dados e classificar com base em colunas.

Respostas:


3

Para o vim, há um bom plugin csv.vim .


Acabei de vir desse plugin procurando uma alternativa. Tem um enorme problema de desempenho quando o csv é "maior"; atualmente ele faz um loop para um csv com 500 linhas.
— k0pernikus


2

Você pode usar gnumeric para esse fim. No meu sistema (Crunchbang) e com um arquivo tão pequeno quanto no seu exemplo, o leafpad consome cerca de 2M de RAM; numérico, 4M; e scalc (do LibreOffice), 34 milhões. O Gnumeric está claramente na extremidade leve e deve detectar seu separador corretamente ao abrir o arquivo.

Mas (existe um mas ...) o gnumeric não permitirá que você salve o arquivo modificado sem passar por uma série de menus. O que segue é um script BASH para corrigir isso. O script conta com o xsel (um gerenciador leve da área de transferência da linha de comando) para colar o conteúdo da planilha modificado novamente no seu arquivo. Se originado (não executado), esse script fornece acesso a duas funções, gn, para abrir o arquivo em gnumeric:

gn filename

e gp para colar o conteúdo novamente no arquivo e fechar o gnumeric:

gp

(Pessoalmente, eu origino esse script no meu .bashrc para ter as funções gn e gp disponíveis sempre que abro um terminal.)

#! /bin/bash

# once sourced by the shell, this script provides two functions:

# gn        to open a file with gnumeric
# gp        to update the file with gnumeric's selection

# requires grep, sed, awk, and the xsel utility


# name of the target file: used in gn () and gp ()
# ==================================================
gn_file=

# take note of target file and open it with gnumeric if not already opened
# ==================================================
gn () {
    # sanity checks
    if [[ -z $1 ]]; then
        echo 'Usage: gn file'
        return
    fi
    if ! [[ -f $1 && -r $1 ]]; then
        echo "Cannot find/use $1"
        return
    fi
    # yes, this is right; job report, if any, has "$gn_file" not expanded
    if jobs -l | grep 'Running.* gnumeric "$gn_file"' > /dev/null; then
        echo 'Already editing with gnumeric.'
        return
    fi
    echo 'Once done, select the part of the spreadsheet you want to save,'
    echo 'press Ctrl-C, go back to the command line, and type gp [ENTER].'
    # do the job
    gn_file=$1
    gnumeric "$gn_file" &
}

# paste selection into target file and close gnumeric
# ==================================================
gp () {
    # sanity checks
    if [[ -z $gn_file || ! -f $gn_file ]]; then
        echo 'Cannot find/use target file.'
        return
    fi
    local gnumeric_job=$( jobs -l | grep 'Running.* gnumeric "$gn_file"' )
    if [[ -z $gnumeric_job ]]; then
        echo 'No gnumeric instance to paste from.'
        return
    fi
    if [[ -z $( xsel -ob ) ]]; then
        echo 'Nothing to paste.'
        return
    fi
    local temp_file=$( mktemp "$PWD/temp.XXXXXX" )
    # paste X selection (o = output, b = clipboard mode)
    xsel -ob > "$temp_file"
    # replace tabs to get a CSV file
    local tab=$'\t'
    sed --in-place "s/$tab/,/g" "$temp_file"
    # must close gnumeric before updating file
    local job_id=$( echo "$gnumeric_job" | awk '{print $2}' )
    kill "$job_id"
    mv --backup "$temp_file" "$gn_file"
    echo "$gn_file updated."
}

Como o próprio script informará ao abrir seu arquivo com gnumeric, ao concluir sua edição, você deverá selecionar a parte da planilha que deseja salvar antes de pressionar Ctr-C (para copiar essa parte para a área de transferência). Voltando à linha de comando (Alt-Tab), digitar gp atualizará seu arquivo com o conteúdo da área de transferência e fechará o gnumeric. Seus valores modificados não terão aspas, mas serão separados por guias; portanto, o script usa sed para substituir as guias por vírgulas.

Eu descobri que essa é uma maneira eficiente de trabalhar com arquivos de dados CSV na linha de comando. O script deve salvar o arquivo corretamente, desde que não contenha guias nos campos separados por vírgula (o que parece ser o caso no seu exemplo de análise de dados).


1

Eu sei o que você quer dizer sobre o {Libre, Open} Office. TBH, nunca encontrei nada realmente bom no Linux que também seja leve.

O "melhor" (sim, entre aspas irônicas) que encontrei até agora é um aplicativo java chamado csveditor. É bastante limpo, mas não segue as melhores diretrizes de interface do usuário.



0

Estou usando o phpstorm e tenho que lidar muito com arquivos CSV, e ele suporta a edição deles em uma exibição de tabela e tem um desempenho muito melhor que o plugin vim csv.vim ou o tablr do plugin atom.

Captura de tela da exibição de tabela

O mesmo deve se aplicar aos outros editores, como IntelliJ Idea, Android Studio, Pycharm e RubyMine. Não é um software livre, mas alguns de seus produtos têm edições da comunidade.

(No entanto, o peitoril não é perfeito, pois às vezes apenas mostra erros de arquivo muito grandes.)


0

Sugiro o plugin tablr para o editor Atom.

Não é a opção mais leve, mas realiza edições simples com o menor número de cliques.

insira a descrição da imagem aqui


-1

Salvei seu exemplo como test.csv e o abri com o LibreOffice sem nenhum problema:

$ cat test.csv
This,is,data,with,a,header
2,2,3,4,,
1,,3,,6,6
,5,3,5,5,6
1,2,,,,
1,2,3,4,8,6
1,,9,,5,9
-1,,3,4,5,6
1,2,0,4,5,6
$ libreoffice test.csv 

Eu recebi esse diálogo e escolhi "vírgula" como separador:

insira a descrição da imagem aqui

Cliquei em OK e consegui:

insira a descrição da imagem aqui

O que mais você precisa?


O problema que estou tendo com o openoffice é que, às vezes, as opções do separador são alteradas sem aviso prévio e o arquivo é salvo com delimitadores de cotação (o OO parece não ter forçado os padrões). Isso acontece mais quando salvar um arquivo para fora em vez de carregar um arquivo no.
— Andrew Wood

Certamente, é possível com o OpenOffice, você está certo.
— Andrew Wood

11
Quanto a "o que mais você precisa", eu já estive na situação de @AndrewWood e geralmente preciso de menos :) Eu já fiz essa pergunta pessoalmente antes. Eu amo o LibreOffice. Eu uso isso o tempo todo. Mas, às vezes, você quer um editor CSV simples que não consuma uma grande quantidade de RAM e fique fora do seu caminho.
— Rich Homolka

@RichHomolka, para dizer a verdade, eu uso gawk:) #
— 1300 terdon

Atuação. Uma vez que o csv fica um pouco maior, basta carregá-los para sempre, e eu nem tento editar esses arquivos no OpenOffice.
— K0pernikus
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.