在Ubuntu中编辑CSV文件[关闭]


9

在Ubuntu中编辑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

我一直在使用OpenOffice,但是要关闭引用所有字段的默认行为,大约需要5次单击。

我想找到一些轻巧且易于使用的东西,它允许插入/删除数据以及基于列的排序。

Answers:


3

对于vim,有一个不错的插件csv.vim


我只是从那个插件中寻找替代方案。当csv“更大”时,会产生巨大的性能问题;目前,它为具有500行的csv循环。
k0pernikus


2

为此,您可以使用数字。在我的系统(Crunchbang)上,并且文件大小与您的示例一样小,leafpad占用大约2M的RAM;字母数字,4M;和scalc(来自LibreOffice),34M。字母数字显然在轻量级的一端,并且在打开文件时应正确检测到分隔符。

但是(有一个but ...)数字不让您不经过菜单障碍就可以保存修改后的文件。接下来是一个BASH脚本来解决此问题。该脚本依靠xsel(轻量级的命令行剪贴板管理器)将修改后的电子表格内容粘贴回文件中。如果使用源代码(未运行),此脚本可让您访问gn这两个函数,以使用gnumeric打开文件:

gn filename

和gp将内容粘贴回文件并关闭数字:

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."
}

正如脚本本身会告诉您何时使用数字字母打开文件一样,当您完成编辑后,在按Ctr-C之前,必须选择要保存的电子表格部分(将这部分复制到剪贴板)。返回命令行(Alt-Tab),输入gp将使用剪贴板中的内容更新文件并关闭数字。修改后的值将没有引号,但是它们之间会以制表符分隔;因此,该脚本使用sed来用逗号替换制表符。

我发现这是从命令行处理CSV数据文件的有效方法。该脚本应正确保存文件,只要该文件在逗号分隔的字段中不包含选项卡即可(在数据分析示例中似乎是这种情况)。


1

我知道您对{Libre,Open} Office的理解。TBH,我从来没有在轻量级的Linux上找到任何真正好用的东西。

到目前为止,我发现的“最佳”(是的,用讽刺语引用)是一个名为csveditor的Java应用程序。它很干净,但是并没有真正遵循最佳的UI准则。



0

我使用的是phpstorm,必须处理很多CSV文件,并且它支持在表视图中对其进行编辑,并且比vim插件csv.vim或atom插件tablr更好。

表格视图的屏幕截图

这同样适用于其他编辑器,例如IntelliJ Idea,Android Studio,Pycharm和RubyMine。它不是免费软件,但其某些产品具有社区版本。

(然而,它仍然不是完美的,因为有时它只是显示文件太大的错误。)


0

我建议Atom编辑器使用tablr插件

它不是最轻巧的选项,但只需最少的点击即可完成简单的编辑。

在此处输入图片说明


-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编辑器,该编辑器不会占用大量RAM,而不会影响您的工作。
Rich Homolka

@RichHomolka,说实话,我用gawk:)
terdon

性能。一旦csv变大,仅需永久加载它们,我什至不再尝试在OpenOffice中编辑此类文件。
k0pernikus
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.