크기가 7GB 이상이고 행이 30M인 .csv 파일이 있습니다. SQL Server의 데이터베이스 테이블에 파일을 로드하면 일부 누락된 필드로 인해 일부 서식 문제가 있는 행의 위치가 보고됩니다.
less를 사용하여 위치(즉, 행 번호)가 있는 행을 볼 수 있습니다.
less +24923786 -N huge.csv
Emacs에서 열려고 했지만 Emacs에서 열기에는 너무 큽니다. 정상인가요? (나는 실제로 Windows에서 git bash와 휴대용 Emacs를 사용하고 있습니다 less
. 따라서 본격적인 Emacs가 그것을 열고 해당 줄을 편집할 수 있는지 여부는 알 수 없습니다.)
CSV 파일의 행을 편집하는 방법은 무엇입니까? (저는 Linux의 도구나 git bash에서 사용할 수 있는 일부 편집기, 또는 Windows용 휴대용 버전에 관심이 있습니다.)
감사해요.
답변1
ed
라인을 쉽게 편집할 수 있습니다. c
줄을 변경(교체)하는 명령입니다. 줄 자체의 마침표는 wq
변경된 파일을 디스크에 다시 쓰고 종료한다는 신호입니다.
$ ed huge.csv
24923786c
new,data,goes,here
.
wq
또는 bash "one"-라이너로:
$ ed -s huge.csv <<< $'24923786c
new,data,goes,here
.
wq
'
답변2
편집기에서 실제로 한 줄을 편집하려면 sed
다음과 같이 줄을 추출하고 편집한 다음 다시 연결하면 됩니다(호환되는 버전 또는 git-bash의 sed가 있어야 함).
sed '24923786,24923786p' -n huge.csv > line.txt
edit line.txt
sed '24923786,24923786{s/.*/cat line.txt/e;}' -i huge.csv
먼저 테스트하고 백업을 만드십시오(옵션의 suffix 매개변수를 사용할 수 있습니다. i
예를 들어 -i.bak
sed가 자동으로 원본 파일을 에 백업하도록 할 수 있습니다 huge.csv.bak
).
여담: 거대한 텍스트 파일에서 일련의 줄을 열고 편집할 수 있도록 특별히 지원하는 편집기가 없다면 놀랄 것입니다. 하지만 저는 그것에 대해 몰랐습니다. 내가 아는 것은 약간 큰 파일을 처리할 때 gedit(내 goto 편집기)가 심하게 충돌하고 vscode가 더 나은 작업을 수행하는 것 같지만 최근에는 그 이상을 처리할 필요가 없다는 것입니다.