7GB CSV 파일의 행을 편집하는 방법은 무엇입니까?

7GB CSV 파일의 행을 편집하는 방법은 무엇입니까?

크기가 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.baksed가 자동으로 원본 파일을 에 백업하도록 할 수 있습니다 huge.csv.bak).


여담: 거대한 텍스트 파일에서 일련의 줄을 열고 편집할 수 있도록 특별히 지원하는 편집기가 없다면 놀랄 것입니다. 하지만 저는 그것에 대해 몰랐습니다. 내가 아는 것은 약간 큰 파일을 처리할 때 gedit(내 goto 편집기)가 심하게 충돌하고 vscode가 더 나은 작업을 수행하는 것 같지만 최근에는 그 이상을 처리할 필요가 없다는 것입니다.

관련 정보