Answers:
Java CsvEditors(例如csveditor,reCsvEditor)可能值得一看
为此,您可以使用数字。在我的系统(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数据文件的有效方法。该脚本应正确保存文件,只要该文件在逗号分隔的字段中不包含选项卡即可(在数据分析示例中似乎是这种情况)。
我将您的示例保存为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
然后,我得到此对话框,并选择“逗号”作为分隔符:
我单击确定,并得到了:
您还需要什么?
gawk
:)