การแก้ไขไฟล์ CSV ใน Ubuntu [ปิด]


9

วิธีที่ดีในการแก้ไขไฟล์ CSV ใน Ubuntu คืออะไร

ไฟล์มีลักษณะดังนี้:

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

ฉันใช้ OpenOffice แต่ใช้เวลาประมาณ 5 คลิกในการปิดพฤติกรรมเริ่มต้นของการอ้างอิงทุกฟิลด์

ฉันต้องการหาสิ่งที่มีน้ำหนักเบาและใช้งานง่ายที่จะช่วยให้การแทรก / ลบข้อมูลและการเรียงลำดับตามคอลัมน์

คำตอบ:


3

สำหรับกลุ่มที่มีปลั๊กอินที่ดีcsv.vim


ฉันเพิ่งมาจากปลั๊กอินที่กำลังมองหาทางเลือก มันมีปัญหาประสิทธิภาพการทำงานขนาดใหญ่เมื่อ csv เป็น "ใหญ่กว่า"; ปัจจุบันมันวนลูปสำหรับ csv ที่มี 500 บรรทัด
k0pernikus


2

คุณอาจใช้ gnumeric ด้วยเหตุนี้ ในระบบของฉัน (Crunchbang) และไฟล์มีขนาดเล็กอย่างในตัวอย่างของคุณ leafpad ใช้ RAM ประมาณ 2M gnumeric, 4 ล้าน; และ scalc (จาก LibreOffice), 34 ล้าน Gnumeric นั้นอยู่ที่ส่วนท้ายที่มีน้ำหนักเบาและควรตรวจจับตัวคั่นของคุณอย่างถูกต้องเมื่อเปิดไฟล์

แต่ (มี แต่ ... ) gnumeric จะไม่อนุญาตให้คุณบันทึกไฟล์ที่แก้ไขโดยไม่ผ่านเมนู สิ่งต่อไปนี้เป็นสคริปต์ BASH เพื่อแก้ไขปัญหานี้ สคริปต์อาศัย xsel (ผู้จัดการคลิปบอร์ด commmand-line ที่มีน้ำหนักเบา) เพื่อวางเนื้อหาสเปรดชีตที่แก้ไขแล้วกลับเข้าไปในไฟล์ของคุณ หากมีที่มา (ไม่ได้รัน) สคริปต์นี้ให้คุณเข้าถึงสองฟังก์ชัน gn เพื่อเปิดไฟล์เป็น gnumeric:

gn filename

และ gp เพื่อวางเนื้อหากลับเข้าไปในไฟล์และปิด gnumeric:

gp

(โดยส่วนตัวแล้วฉันมาสคริปต์นี้ใน. bashrc ของฉันเพื่อให้มีฟังก์ชัน gn และ gp เมื่อใดก็ตามที่ฉันเปิดเทอร์มินัล)

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

สคริปต์จะแจ้งให้คุณทราบเมื่อเปิดไฟล์ด้วย gnumeric เมื่อคุณแก้ไขเสร็จแล้วคุณต้องเลือกส่วนของสเปรดชีตที่คุณต้องการบันทึกก่อนกด Ctr-C (เพื่อคัดลอกส่วนนี้ไปยังคลิปบอร์ด) กลับไปที่บรรทัดคำสั่ง (Alt-Tab) การป้อน gp จะอัปเดตไฟล์ของคุณด้วยเนื้อหาของคลิปบอร์ดและปิด gnumeric ค่าที่แก้ไขของคุณจะไม่มีเครื่องหมายคำพูดล้อมรอบ แต่จะคั่นด้วยแท็บ ดังนั้นสคริปต์ใช้ sed เพื่อแทนที่แท็บด้วยเครื่องหมายจุลภาค

ฉันพบว่านี่เป็นวิธีที่มีประสิทธิภาพในการทำงานกับไฟล์ข้อมูล CSV จากบรรทัดคำสั่ง สคริปต์ควรบันทึกไฟล์อย่างถูกต้องตราบใดที่ไม่มีแท็บภายในฟิลด์ที่คั่นด้วยเครื่องหมายจุลภาค (ซึ่งน่าจะเป็นกรณีในตัวอย่างการวิเคราะห์ข้อมูลของคุณ)


1

ฉันรู้ว่าคุณหมายถึงอะไรเกี่ยวกับ {Libre, Open} Office TBH ฉันไม่เคยพบอะไรที่ดีจริงๆบน Linux ที่มีน้ำหนักเบา

"ดีที่สุด" (ใช่ในเครื่องหมายคำพูดแดกดัน) ฉันพบแล้วว่าเป็นแอปพลิเคชัน java ชื่อcsveditorมันค่อนข้างสะอาด แต่ไม่ได้ปฏิบัติตามแนวทาง UI ที่ดีที่สุด


0

ผมใช้DMcsvEditor มันเร็วและน้ำหนักเบาและมีตัวเลือกที่เป็นประโยชน์พื้นฐานบางอย่าง


ดูเหมือนว่า DMcsvEditor จะเปลี่ยนเป็นCSVpad
Youda008

0

ฉันใช้ phpstorm และต้องจัดการกับไฟล์ CSV เป็นจำนวนมากและสนับสนุนการแก้ไขในมุมมองตารางและทำงานได้ดีกว่า vim plugin csv.vimหรือแท็บปลั๊กอิน atom

สกรีนช็อตของมุมมองตาราง

ควรใช้กับบรรณาธิการอื่น ๆ เช่น IntelliJ Idea, Android Studio, Pycharm และ RubyMine ไม่ใช่ซอฟต์แวร์ฟรี แต่ผลิตภัณฑ์บางอย่างมีรุ่นชุมชน

(ถึงกระนั้นมันก็ไม่สมบูรณ์แบบเพราะบางครั้งมันก็แค่แสดงข้อผิดพลาดไฟล์ใหญ่เกินไป)


0

ฉันแนะนำปลั๊กอิน tablrสำหรับโปรแกรมแก้ไข Atom

มันไม่ใช่ตัวเลือกที่เบาที่สุด แต่ได้การแก้ไขที่ง่ายในการคลิกเพียงไม่กี่ครั้ง

ป้อนคำอธิบายรูปภาพที่นี่


-1

ฉันบันทึกตัวอย่างของคุณเป็น test.csv และเปิดด้วย LibreOffice โดยไม่มีปัญหาเลย:

$ 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 

ฉันได้รับกล่องโต้ตอบนี้และเลือก "เครื่องหมายจุลภาค" เป็นตัวคั่น:

ป้อนคำอธิบายรูปภาพที่นี่

ฉันคลิกที่ตกลงและรับสิ่งนี้:

ป้อนคำอธิบายรูปภาพที่นี่

คุณต้องการอะไรอีก


ปัญหาที่ฉันมีกับ openoffice คือบางครั้งตัวเลือกตัวคั่นเปลี่ยนแปลงโดยไม่แจ้งให้ทราบล่วงหน้าและไฟล์จะถูกบันทึกด้วยตัวคั่นอัญประกาศ มันเกิดขึ้นได้มากกว่าเมื่อทำการบันทึกไฟล์แทนที่จะทำการโหลดไฟล์
แอนดรูวู้ด

เป็นไปได้อย่างแน่นอนกับ OpenOffice แม้ว่าคุณพูดถูก
Andrew Wood

1
เท่าที่ "คุณต้องการอะไรมากกว่านี้" ฉันอยู่ในสถานการณ์ของ @AndrewWood และต้องการน้อยกว่าโดยทั่วไป :) ฉันเคยถามคำถามนี้มาก่อนแล้ว ฉันรัก LibreOffice ฉันจะใช้มันตลอดเวลา. แต่บางครั้งคุณต้องการตัวแก้ไข CSV แบบง่าย ๆ ที่ไม่ใช้หน่วยความจำขนาดใหญ่และไม่ได้อยู่ในแนวทางของคุณ
Rich Homolka

@RichHomolka เพื่อบอกความจริงกับคุณฉันใช้gawk:)
terdon

ประสิทธิภาพ. เมื่อ csv มีขนาดใหญ่ขึ้นเพียงแค่โหลดมันจะใช้เวลานานและฉันก็ไม่ได้พยายามแก้ไขไฟล์ดังกล่าวใน OpenOffice อีกต่อไป
k0pernikus
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.