Редактирование 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 потребляет около 2M ОЗУ; числовой, 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 или плагин atom 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 

Затем я получил этот диалог и выбрал «запятую» в качестве разделителя:

введите описание изображения здесь

Я нажал на OK и получил это:

введите описание изображения здесь

Что тебе еще надо?


Проблема, с которой я сталкиваюсь в openoffice, заключается в том, что иногда параметры разделителя изменяются без уведомления, и файл сохраняется с разделителями кавычек (в OO, похоже, отсутствуют форсированные значения по умолчанию). Это происходит чаще, когда вы сохраняете файл, а не загружаете его.
Эндрю Вуд

Это конечно возможно с OpenOffice, хотя, вы правы.
Эндрю Вуд

1
Что касается «что еще тебе нужно», я был в ситуации @AndrewWood и, как правило, мне нужно меньше :) Я лично задавал этот вопрос раньше. Я люблю LibreOffice. Я использую это все время. Но иногда вам нужен простой CSV-редактор, который не занимает большой объем оперативной памяти и просто мешает вам.
Rich Homolka

@RichHomolka, честно говоря, я использую gawk:)
terdon

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