12 votes

Édition de fichiers CSV dans Ubuntu

Quel est le bon moyen d'éditer des fichiers CSV dans Ubuntu ?

Les fichiers ressemblent à ceci :

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

J'ai utilisé OpenOffice, mais il faut environ 5 clics pour désactiver le comportement par défaut qui consiste à citer tous les champs.

J'aimerais trouver quelque chose de léger et de facile à utiliser qui permette d'insérer/supprimer des données et d'effectuer un tri par colonne.

4voto

ott-- Points 2091

Pour vim, il existe un plugin sympa csv.vim .

3voto

Bruce Martin Points 240

Les CsvEditors de java (par ex. csveditor , reCsvEditor ) peut valoir le coup d'œil

3voto

Vous pouvez utiliser gnumeric à cette fin. Sur mon système (Crunchbang) et avec un fichier aussi petit que dans votre exemple, leafpad consomme environ 2M de RAM ; gnumeric, 4M ; et scalc (de LibreOffice), 34M. Gnumeric est clairement sur l'extrémité légère, et il devrait détecter votre séparateur correctement à l'ouverture du fichier.

Mais (il y a un mais...) gnumeric ne vous laissera pas sauvegarder le fichier modifié sans passer par une haie de menus. Ce qui suit est un script BASH pour corriger cela. Le script s'appuie sur xsel (un gestionnaire de presse-papiers léger en ligne de commande) pour recoller le contenu modifié de la feuille de calcul dans votre fichier. Si sourcé (non exécuté), ce script vous donne accès à deux fonctions, gn pour ouvrir le fichier en gnumeric :

gn filename

et gp pour recoller le contenu dans le fichier et fermer gnumeric :

gp

(Personnellement, je source ce script dans mon .bashrc pour avoir les fonctions gn et gp disponibles dès que j'ouvre un 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."
}

Comme le script vous le dira lui-même en ouvrant votre fichier avec gnumeric, lorsque vous avez terminé votre édition, vous devez sélectionner la partie de la feuille de calcul que vous souhaitez enregistrer avant d'appuyer sur Ctr-C (pour copier cette partie dans le presse-papiers). En revenant à la ligne de commande (Alt-Tab), la saisie de gp mettra à jour votre fichier avec le contenu du presse-papiers et fermera gnumeric. Vos valeurs modifiées n'auront pas de guillemets autour d'elles, mais elles seront séparées par des tabulations ; c'est pourquoi le script utilise sed pour remplacer les tabulations par des virgules.

J'ai trouvé que c'était un moyen efficace de travailler sur des fichiers de données CSV à partir de la ligne de commande. Le script devrait enregistrer le fichier correctement tant qu'il ne contient pas de tabulations dans les champs séparés par des virgules (ce qui semble être le cas dans votre exemple d'analyse de données).

2voto

Lark Points 1640

Je vois ce que tu veux dire à propos de {Libre,Open}Office. Pour être franc, je n'ai jamais rien trouvé de vraiment bien sous Linux qui soit aussi léger.

Le "meilleur" (oui, entre guillemets ironiques) que j'ai trouvé jusqu'à présent est une application java appelée csveditor Il est assez propre, mais ne suit pas vraiment les meilleures directives en matière d'interface utilisateur.

2voto

Vanuan Points 169

Je propose plugin tablr pour l'éditeur Atom.

Ce n'est pas l'option la plus légère, mais elle permet de réaliser des modifications simples en quelques clics.

enter image description here

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X