Редагування файлів 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

Для vim є хороший плагін csv.vim .


Я просто з цього плагіна шукаю альтернативу. Це величезна проблема з продуктивністю, коли csv "більший"; в даний час він циклічний для csv, що містить 500 рядків.
k0pernikus


2

Ви можете використовувати gnumeric для цього. У моїй системі (Crunchbang) і з файлом таким же маленьким, як у вашому прикладі, leafpad споживає близько 2 млн оперативної пам'яті; gnumeric, 4М; і шкірка (від LibreOffice), 34М. Gnumeric чітко знаходиться в легкій частині, і він повинен правильно визначити ваш роздільник при відкритті файлу.

Але (є, але ...) gnumeric не дозволить вам зберегти модифікований файл, не проходячи через перешкоди меню. Далі йде сценарій BASH, щоб виправити це. Сценарій покладається на xsel (легкий менеджер буфера обміну повідомленнями), щоб вставити змінений вміст електронної таблиці назад у ваш файл. Якщо джерело (не запущено), цей скрипт надає вам доступ до двох функцій, 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, який також був легким.

"Найкращий" (так, в цитатах Ironic ), який я знайшов поки що, це програма Java, яка називається csveditor. Це досить чисто, але насправді не дотримується найкращих вказівок інтерфейсу користувача.



0

Я використовую phpstorm і мені доводиться багато працювати з файлами CSV, і він підтримує редагування їх у поданні таблиці, і він працює набагато краще, ніж плагін vim csv.vim або табло plul tablr.

Знімок екрана подання таблиці

Те ж саме стосується інших редакторів, таких як 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, полягає в тому, що іноді параметри розділювача змінюються без попереднього повідомлення, і файл зберігається з роздільниками цитат (OO, здається, не вистачає примусових параметрів за замовчуванням). Це трапляється більше при збереженні файлу, а не при завантаженні файлу.
Ендрю Вуд

З OpenOffice це, безумовно, можливо, ви маєте рацію.
Ендрю Вуд

1
Що стосується "що вам більше потрібно", я був у ситуації @AndrewWood і, як правило, потрібно менше :) Я особисто задавав це питання раніше. Я люблю LibreOffice. Я ним користуюся постійно. Але іноді вам потрібен простий редактор CSV, який не займає величезну частину оперативної пам’яті і просто не перешкоджає.
Багата Гомолка

@RichHomolka, правду кажу, я використовую gawk:)
terdon

Продуктивність. Як тільки CSV стає трохи більшим, їх завантаження триває назавжди, і я навіть більше не намагаюся редагувати такі файли в OpenOffice.
k0pernikus
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.