답변:
java CsvEditors (예 : csveditor , reCsvEditor )는 살펴볼 가치가 있습니다.
이를 위해 gnumeric을 사용할 수 있습니다. 내 시스템 (Crunchbang)에서 예제와 같이 작은 파일로 leafpad는 약 2M의 RAM을 소비합니다. 그누 머, 4M; 및 34M의 scalc (LiberOffice). Gnumeric은 가벼우면서도 파일을 열 때 구분 기호를 올바르게 감지해야합니다.
그러나 (그러나 ...) gnumeric은 메뉴의 장애물을 거치지 않고 수정 된 파일을 저장할 수 없습니다. 다음은이를 해결하기위한 BASH 스크립트입니다. 이 스크립트는 xsel (가벼운 명령 줄 클립 보드 관리자)을 사용하여 수정 된 스프레드 시트 내용을 파일에 다시 붙여 넣습니다. 경우 공급 (실행되지 않음),이 스크립트는 gnumeric과에서 파일을 열 GN 두 가지 기능에 액세스 할 수 있습니다 :
gn filename
gp를 사용하여 파일에 내용을 다시 붙여 넣고 gnumeric을 닫습니다.
gp
(개인적으로 터미널을 열 때마다 gn 및 gp 함수를 사용할 수 있도록 .bashrc에이 스크립트를 제공합니다.)
#! /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 데이터 파일을 작업하는 효율적인 방법이라는 것을 알았습니다. 스크립트는 쉼표로 구분 된 필드 내에 탭이 포함되어 있지 않으면 파일을 올바르게 저장해야합니다 (데이터 분석 예제에서와 같이).
phpstorm을 사용하고 있으며 CSV 파일을 많이 처리 해야하며 테이블보기에서 파일을 편집 할 수 있으며 vim 플러그인 csv.vim 또는 atom 플러그인 tablr 보다 훨씬 잘 수행 됩니다.
IntelliJ Idea, Android Studio, Pycharm 및 RubyMine과 같은 다른 편집기에도 동일하게 적용됩니다. 무료 소프트웨어는 아니지만 일부 제품에는 커뮤니티 에디션이 있습니다.
(때로는 파일에 너무 큰 오류가 표시되기 때문에 문턱이 완벽하지는 않습니다.)
예제를 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
:)