Mengedit file CSV di Ubuntu [ditutup]


9

Apa cara yang baik untuk mengedit file CSV di Ubuntu?

File terlihat seperti ini:

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

Saya telah menggunakan OpenOffice, tetapi dibutuhkan sekitar 5 klik untuk mematikan perilaku default mengutip semua kolom.

Saya ingin mencari sesuatu yang ringan dan mudah digunakan yang akan memungkinkan memasukkan / menghapus data, dan penyortiran berbasis kolom.

Jawaban:


3

Untuk vim, ada plugin csv.vim yang bagus .


Saya baru saja datang dari plugin itu mencari alternatif. Ini memiliki masalah kinerja yang sangat besar ketika csv "lebih besar"; saat ini loop untuk csv memiliki 500 baris.
k0pernikus


2

Anda mungkin menggunakan gnumerik untuk tujuan ini. Pada sistem saya (Crunchbang) dan dengan file sekecil pada contoh Anda, leafpad mengkonsumsi sekitar 2M RAM; gnumeric, 4M; dan scalc (dari LibreOffice), 34 jt. Gnumeric jelas berada di ujung yang ringan, dan itu harus mendeteksi pemisah Anda dengan benar saat membuka file.

Tapi (ada tapi ...) gnumeric tidak akan membiarkan Anda menyimpan file yang dimodifikasi tanpa melalui rintangan menu. Berikut ini adalah skrip BASH untuk memperbaikinya. Script ini mengandalkan xsel (clipboard manager commmand-line ringan) untuk menempelkan konten spreadsheet yang dimodifikasi kembali ke file Anda. Jika bersumber (tidak dijalankan), skrip ini memberi Anda akses ke dua fungsi, gn untuk membuka file dalam gnumerik:

gn filename

dan gp untuk menempelkan konten kembali ke file dan tutup gnumeric:

gp

(Secara pribadi, saya sumber skrip ini di .bashrc saya untuk memiliki fungsi gn dan gp tersedia setiap kali saya membuka 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."
}

Karena skrip itu sendiri akan memberi tahu Anda ketika membuka file Anda dengan gnumeric, ketika Anda selesai mengedit, Anda harus memilih bagian dari spreadsheet yang ingin Anda simpan sebelum menekan Rkt-C (untuk menyalin bagian ini ke clipboard). Kembali ke baris perintah (Alt-Tab), memasukkan gp akan memperbarui file Anda dengan isi clipboard dan menutup gnumeric. Nilai Anda yang dimodifikasi tidak akan memiliki tanda kutip di sekitarnya, tetapi akan dipisahkan oleh tab; karenanya, skrip menggunakan sed untuk mengganti tab dengan koma.

Saya menemukan ini sebagai cara yang efisien untuk bekerja pada file data CSV dari baris perintah. Skrip harus menyimpan file dengan benar selama tidak mengandung tab dalam bidang yang dipisahkan koma (yang tampaknya menjadi kasus dalam contoh analisis data Anda).


1

Saya tahu apa yang Anda maksud tentang {Libre, Open} Office. TBH, saya tidak pernah menemukan sesuatu yang benar-benar bagus di Linux yang juga ringan.

"Terbaik" (ya, dalam kutipan Ironic) yang saya temukan sejauh ini adalah aplikasi java yang disebut csveditor Ini cukup bersih, tetapi tidak benar-benar mengikuti pedoman UI terbaik.



0

Saya menggunakan phpstorm dan harus sering berurusan dengan file CSV, dan mendukung pengeditannya dalam tampilan tabel dan kinerjanya jauh lebih baik daripada plugin vim csv.vim atau tablr plugin atom.

Cuplikan layar tampilan tabel

Hal yang sama harus berlaku untuk editor mereka yang lain, yaitu IntelliJ Idea, Android Studio, Pycharm, dan RubyMine. Ini bukan perangkat lunak bebas, namun beberapa produk mereka memiliki edisi komunitas.

(Namun masih belum sempurna karena kadang-kadang hanya menunjukkan kesalahan file terlalu besar.)


0

Saya sarankan plugin tablr untuk editor Atom.

Ini bukan opsi yang paling ringan tetapi mencapai pengeditan sederhana dalam klik paling sedikit.

masukkan deskripsi gambar di sini


-1

Saya menyimpan contoh Anda sebagai test.csv dan membukanya dengan LibreOffice tanpa kesulitan sama sekali:

$ 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 

Saya kemudian mendapatkan dialog ini, dan memilih "koma" sebagai pemisah:

masukkan deskripsi gambar di sini

Saya mengklik OK dan mendapatkan ini:

masukkan deskripsi gambar di sini

Apa lagi yang kamu butuhkan?


Masalah yang saya alami dengan openoffice adalah bahwa kadang-kadang opsi pemisah berubah tanpa pemberitahuan, dan file tersebut disimpan dengan pembatas kutipan (OO tampaknya tidak memaksakan default). Ini lebih sering terjadi ketika menyimpan file daripada memuat file.
Andrew Wood

Tapi tentu saja mungkin dengan OpenOffice, Anda benar.
Andrew Wood

1
Sejauh "apa lagi yang Anda butuhkan", saya sudah berada dalam situasi @AndrewWood dan umumnya membutuhkan lebih sedikit :) Saya pribadi pernah mengajukan pertanyaan ini sebelumnya. Saya suka LibreOffice. Saya menggunakannya sepanjang waktu. Tetapi kadang-kadang Anda menginginkan editor CSV sederhana yang tidak memakan banyak RAM dan hanya menyingkir.
Rich Homolka

@RichHomolka, sejujurnya, saya menggunakan gawk:)
terdon

Performa. Setelah csv menjadi sedikit lebih besar, hanya memuatnya akan berlangsung selamanya, dan saya bahkan tidak mencoba mengedit file seperti itu di dalam OpenOffice lagi.
k0pernikus
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.