Bearbeiten von CSV-Dateien in Ubuntu [geschlossen]

9

Was ist ein guter Weg, um CSV-Dateien in Ubuntu zu bearbeiten?

Die Dateien sehen ungefähr so ​​aus:

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

Ich habe OpenOffice verwendet, aber es dauert ungefähr 5 Klicks, um das Standardverhalten beim Zitieren aller Felder zu deaktivieren.

Ich möchte etwas Leichtes und Benutzerfreundliches finden, das das Einfügen / Löschen von Daten und das spaltenbasierte Sortieren ermöglicht.

Andrew Wood
quelle

Antworten:

3

Für vim gibt es ein nettes Plugin csv.vim .

ott--
quelle
Ich komme gerade von diesem Plugin und suche nach einer Alternative. Es hat ein großes Leistungsproblem, wenn die CSV "größer" sind; Derzeit schleift es für eine CSV mit 500 Zeilen.
k0pernikus
2

Die Java-CsvEditors (z. B. csveditor , reCsvEditor ) sind möglicherweise einen Blick wert

Bruce Martin
quelle
2

Sie können zu diesem Zweck gnumerisch verwenden. Auf meinem System (Crunchbang) und mit einer Datei, die so klein ist wie in Ihrem Beispiel, verbraucht Leafpad etwa 2 MB RAM. gnumerisch, 4 M; und Scalc (von LibreOffice), 34M. Gnumeric befindet sich eindeutig am leichtgewichtigen Ende und sollte Ihr Trennzeichen beim Öffnen der Datei korrekt erkennen.

Aber (es gibt ein aber ...) Gnumeric lässt Sie die geänderte Datei nicht speichern, ohne eine Hürde von Menüs zu durchlaufen. Was folgt, ist ein BASH-Skript, um dies zu beheben. Das Skript basiert auf xsel (einem einfachen Befehlszeilen-Manager für Befehlszeilen), um den geänderten Tabelleninhalt wieder in Ihre Datei einzufügen. Wenn sourced (nicht ausgeführt), gibt das Skript , das Sie zwei Funktionen zuzugreifen, gn die Datei in gnumeric zu öffnen:

gn filename

und gp, um den Inhalt wieder in die Datei einzufügen und gnumeric zu schließen:

gp

(Ich persönlich beziehe dieses Skript in meiner .bashrc-Datei, damit die Funktionen gn und gp verfügbar sind, wenn ich ein Terminal öffne.)

#! /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."
}

Wie das Skript selbst beim Öffnen Ihrer Datei mit gnumerisch anzeigt, müssen Sie nach Abschluss der Bearbeitung den Teil der Tabelle auswählen, den Sie speichern möchten, bevor Sie Strg-C drücken (um diesen Teil in die Zwischenablage zu kopieren). Wenn Sie zur Befehlszeile (Alt-Tab) zurückkehren und gp eingeben, wird Ihre Datei mit dem Inhalt der Zwischenablage aktualisiert und gnumerisch geschlossen. Ihre geänderten Werte werden nicht in Anführungszeichen gesetzt, sondern durch Tabulatoren getrennt. Daher verwendet das Skript sed, um Tabulatoren durch Kommas zu ersetzen.

Ich habe festgestellt, dass dies eine effiziente Möglichkeit ist, CSV-Datendateien über die Befehlszeile zu bearbeiten. Das Skript sollte die Datei korrekt speichern, solange sie keine Tabulatoren in den durch Kommas getrennten Feldern enthält (was in Ihrem Beispiel für die Datenanalyse der Fall zu sein scheint).

François Tonneau
quelle
1

Ich weiß, was Sie mit {Libre, Open} Office meinen. TBH, ich habe unter Linux nie etwas wirklich Gutes gefunden, das auch leicht ist.

Das "Beste" (ja, in ironischen Anführungszeichen), das ich bisher gefunden habe, ist eine Java-App namens csveditor. Sie ist ziemlich sauber, folgt aber nicht wirklich den besten UI-Richtlinien.

Reiche Homolka
quelle
0

Ich benutze DMcsvEditor . Es ist schnell und leicht und bietet einige grundlegende nützliche Optionen.

aggregat1166877
quelle
Es sieht so aus, als ob der DMcsvEditor
Youda008 vom
0

Ich benutze phpstorm und muss mich viel mit CSV-Dateien beschäftigen. Es unterstützt das Bearbeiten in einer Tabellenansicht und bietet eine viel bessere Leistung als das vim-Plugin csv.vim oder das Atom-Plugin tablr.

Screenshot der Tabellenansicht

Gleiches sollte für die anderen Editoren gelten, z. B. IntelliJ Idea, Android Studio, Pycharm und RubyMine. Es ist keine freie Software, aber einige ihrer Produkte haben Community-Editionen.

(Trotzdem ist es nicht perfekt, da manchmal nur zu große Fehler in der Datei angezeigt werden.)

k0pernikus
quelle
0

Ich schlage das Tablr-Plugin für den Atom-Editor vor.

Es ist nicht die leichteste Option, erzielt jedoch einfache Änderungen mit wenigen Klicks.

Geben Sie hier die Bildbeschreibung ein

Vanuan
quelle
-1

Ich habe Ihr Beispiel als test.csv gespeichert und es mit LibreOffice ohne Probleme geöffnet:

$ 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 

Ich habe dann diesen Dialog erhalten und "Komma" als Trennzeichen gewählt:

Geben Sie hier die Bildbeschreibung ein

Ich klickte auf OK und bekam Folgendes:

Geben Sie hier die Bildbeschreibung ein

Was brauchst du mehr?

Terdon
quelle
Das Problem mit openoffice ist, dass sich die Trennzeichenoptionen manchmal ohne vorherige Ankündigung ändern und die Datei mit Anführungszeichen getrennt wird (OO scheint keine erzwungenen Standardeinstellungen zu haben). Es passiert mehr beim Speichern einer Datei als beim Laden einer Datei.
Andrew Wood
Mit OpenOffice ist es sicherlich möglich, Sie haben Recht.
Andrew Wood
1
Was "Was brauchst du mehr?" Angestellt habe, war ich in der Situation von @AndrewWood und brauche im Allgemeinen weniger :) Ich habe diese Frage schon einmal persönlich gestellt. Ich liebe LibreOffice. Ich benutze es die ganze Zeit. Aber manchmal möchten Sie einen einfachen CSV-Editor, der nicht viel RAM beansprucht und Ihnen einfach aus dem Weg geht.
Rich Homolka
@ RichHomolka, um die Wahrheit zu sagen, ich benutze gawk:)
Terdon
Performance. Sobald die CSV etwas größer wird, dauert es ewig, sie nur zu laden, und ich versuche nicht einmal mehr, solche Dateien in OpenOffice zu bearbeiten.
k0pernikus