在 Ubuntu 中编辑 CSV 文件

在 Ubuntu 中编辑 CSV 文件

在 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 次单击才能关闭引用所有字段的默认行为。

我想找到一些轻量且易于使用的东西,可以插入/删除数据和基于列的排序。

答案1

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

答案2

java CsvEditors(例如编辑编辑器)可能值得一看

答案3

您可以使用 gnumeric 来实现这一点。在我的系统 (Crunchbang) 上,对于像您的示例一样小的文件,leafpad 占用大约 2M 的 RAM;gnumeric 占用 4M;而 scalc (来自 LibreOffice) 占用 34M。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 数据文件的有效方法。只要逗号分隔的字段中不包含制表符(您的数据分析示例中似乎就是这种情况),脚本就应该可以正确保存文件。

答案4

我建议tablr 插件用于 Atom 编辑器。

它不是最轻量的选项,但只需最少的点击即可实现简单的编辑。

在此处输入图片描述

相关内容