Você pode usar gnumeric para esse fim. No meu sistema (Crunchbang) e com um arquivo tão pequeno quanto no seu exemplo, o leafpad consome cerca de 2M de RAM; numérico, 4M; e scalc (do LibreOffice), 34 milhões. O Gnumeric está claramente na extremidade leve e deve detectar seu separador corretamente ao abrir o arquivo.
Mas (existe um mas ...) o gnumeric não permitirá que você salve o arquivo modificado sem passar por uma série de menus. O que segue é um script BASH para corrigir isso. O script conta com o xsel (um gerenciador leve da área de transferência da linha de comando) para colar o conteúdo da planilha modificado novamente no seu arquivo. Se originado (não executado), esse script fornece acesso a duas funções, gn, para abrir o arquivo em gnumeric:
gn filename
e gp para colar o conteúdo novamente no arquivo e fechar o gnumeric:
gp
(Pessoalmente, eu origino esse script no meu .bashrc para ter as funções gn e gp disponíveis sempre que abro um terminal.)
#! /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."
}
Como o próprio script informará ao abrir seu arquivo com gnumeric, ao concluir sua edição, você deverá selecionar a parte da planilha que deseja salvar antes de pressionar Ctr-C (para copiar essa parte para a área de transferência). Voltando à linha de comando (Alt-Tab), digitar gp atualizará seu arquivo com o conteúdo da área de transferência e fechará o gnumeric. Seus valores modificados não terão aspas, mas serão separados por guias; portanto, o script usa sed para substituir as guias por vírgulas.
Eu descobri que essa é uma maneira eficiente de trabalhar com arquivos de dados CSV na linha de comando. O script deve salvar o arquivo corretamente, desde que não contenha guias nos campos separados por vírgula (o que parece ser o caso no seu exemplo de análise de dados).