Chỉnh sửa tệp CSV trong Ubuntu [đã đóng]


9

Cách tốt để chỉnh sửa tệp CSV trong Ubuntu là gì?

Các tập tin trông giống như thế này:

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

Tôi đã sử dụng OpenOffice, nhưng phải mất khoảng 5 lần nhấp để tắt hành vi mặc định trích dẫn tất cả các trường.

Tôi muốn tìm một cái gì đó nhẹ và dễ sử dụng sẽ cho phép chèn / xóa dữ liệu và sắp xếp dựa trên cột.

Câu trả lời:


3

Đối với vim, có một plugin csv.vim đẹp .


Tôi chỉ đến từ plugin đó để tìm kiếm một sự thay thế. Nó có vấn đề hiệu năng rất lớn khi csv "lớn hơn"; hiện tại nó lặp cho một csv có 500 dòng.
k0pernikus 15/03/2016


2

Bạn có thể sử dụng gnumeric cho đến cuối này. Trên hệ thống của tôi (Crunchbang) và với một tệp nhỏ như trong ví dụ của bạn, leafpad tiêu thụ khoảng 2M RAM; gặm nhấm, 4M; và scalc (từ LibreOffice), 34M. Gnumeric rõ ràng nằm ở đầu nhẹ và nó sẽ phát hiện chính xác dấu phân cách của bạn khi mở tệp.

Nhưng (có một nhưng ...) gnumeric sẽ không cho phép bạn lưu tệp đã sửa đổi mà không phải trải qua một loạt các menu. Điều gì sau đây là một kịch bản BASH để sửa lỗi này. Kịch bản dựa trên xsel (trình quản lý bảng tạm dòng nhẹ) để dán nội dung bảng tính đã sửa đổi vào tệp của bạn. Nếu có nguồn gốc (không chạy), tập lệnh này cung cấp cho bạn quyền truy cập vào hai hàm, gn để mở tệp trong gnumeric:

gn filename

và gp để dán lại nội dung vào tệp và đóng gnumeric:

gp

(Cá nhân, tôi nguồn tập lệnh này trong .bashrc để có các hàm gn và gp khả dụng bất cứ khi nào tôi mở một thiết bị đầu cuối.)

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

Vì chính tập lệnh sẽ cho bạn biết khi mở tệp bằng gnumeric, khi bạn hoàn tất việc chỉnh sửa của mình, bạn phải chọn phần bảng tính bạn muốn lưu trước khi nhấn Ctr-C (để sao chép phần này vào bảng tạm). Quay trở lại dòng lệnh (Alt-Tab), nhập gp sẽ cập nhật tệp của bạn với nội dung của bảng tạm và đóng gnumeric. Các giá trị được sửa đổi của bạn sẽ không có dấu ngoặc kép xung quanh chúng, nhưng chúng sẽ được phân tách bằng các tab; do đó, tập lệnh sử dụng sed để thay thế các tab bằng dấu phẩy.

Tôi đã thấy đây là một cách hiệu quả để làm việc trên các tệp dữ liệu CSV từ dòng lệnh. Tập lệnh nên lưu tệp chính xác miễn là nó không chứa các tab trong các trường được phân tách bằng dấu phẩy (dường như là trường hợp trong ví dụ phân tích dữ liệu của bạn).


1

Tôi biết ý của bạn về Văn phòng {Libre, Open}. TBH, tôi chưa bao giờ tìm thấy bất cứ điều gì thực sự tốt trên Linux mà cũng nhẹ.

"Tốt nhất" (vâng, trong trích dẫn mỉa mai) Tôi đã tìm thấy cho đến nay là một ứng dụng java có tên csveditor Nó khá sạch sẽ, nhưng không thực sự tuân theo các nguyên tắc UI tốt nhất.



0

Tôi đang sử dụng phpstorm và phải xử lý các tệp CSV rất nhiều và nó hỗ trợ chỉnh sửa chúng trong chế độ xem bảng và nó hoạt động tốt hơn nhiều so với plugin vim csv.vim hoặc tablr plugin nguyên tử.

Ảnh chụp màn hình của bảng xem

Điều tương tự cũng nên áp dụng cho các biên tập viên khác của họ, ví dụ như IntelliJ Idea, Android Studio, Pycharm và RubyMine. Đây không phải là phần mềm miễn phí, nhưng một số sản phẩm của họ có phiên bản cộng đồng.

(Tuy nhiên, nó không hoàn hảo vì đôi khi nó chỉ hiển thị lỗi quá lớn.)


0

Tôi đề nghị plugin tablr cho trình soạn thảo Atom.

Đây không phải là tùy chọn nhẹ nhất nhưng đạt được các chỉnh sửa đơn giản chỉ trong vài cú nhấp chuột.

nhập mô tả hình ảnh ở đây


-1

Tôi đã lưu ví dụ của bạn dưới dạng test.csv và mở nó bằng LibreOffice mà không gặp rắc rối nào:

$ 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 

Sau đó tôi nhận được hộp thoại này và chọn "dấu phẩy" làm dấu phân cách:

nhập mô tả hình ảnh ở đây

Tôi bấm vào OK và nhận được điều này:

nhập mô tả hình ảnh ở đây

Bạn cần thêm gì nữa à?


Vấn đề tôi gặp phải với openoffice là đôi khi các tùy chọn phân tách thay đổi mà không cần thông báo và tệp được lưu với dấu phân cách trích dẫn (OO dường như thiếu buộc mặc định). Nó xảy ra nhiều hơn khi lưu tệp ra ngoài thay vì tải tệp.
Andrew Wood

Chắc chắn là có thể với OpenOffice, bạn nói đúng.
Andrew Wood

1
Theo như "bạn cần gì hơn nữa", tôi đã ở trong tình huống của @AndrewWood và thường cần ít hơn :) Cá nhân tôi đã hỏi câu hỏi này trước đây. Tôi yêu LibreScript. Tôi sử dụng nó mọi lúc. Nhưng đôi khi bạn muốn có một trình chỉnh sửa CSV đơn giản mà không chiếm một lượng lớn RAM và tránh xa bạn.
Rich Homolka

@RichHomolka, để nói cho bạn sự thật, tôi sử dụng gawk:)
terdon

Hiệu suất. Khi csv lớn hơn một chút, chỉ cần tải chúng sẽ mất mãi mãi và tôi thậm chí không cố chỉnh sửa các tệp như vậy trong OpenOffice nữa.
k0pernikus 15/03/2016
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.