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.

Andrew Wood
fonte

Respostas:

3

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

ott--
fonte
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

Os CsvEditors java (por exemplo csveditor , reCsvEditor ) pode valer a pena um olhar

Bruce Martin
fonte
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).

François Tonneau
fonte
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.

Rich Homolka
fonte
0

Eu uso o DMcsvEditor . É rápido e leve, e possui algumas opções úteis básicas.

agregate1166877
fonte
Parece que o DMcsvEditor foi transformado em CSVpad
Youda008
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.)

k0pernikus
fonte
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

Vanuan
fonte
-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?

Terdon
fonte
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