멀티 기가 바이트 텍스트 파일을 편집하는 방법은 무엇입니까? Vim이 작동하지 않습니다 = ([닫힘]


112

한 번에 작은 부분 만 메모리에로드하여 멀티 기가 바이트 텍스트 파일을 편집 할 수있는 편집기가 있습니까? Vim이 처리 할 수없는 것 같습니다 = (


저는 vim에 정말 큰 데이터 수집 파일을로드했고 문제없이 처리했습니다.
— Rook

편집 요구에 따라 sed 또는 perl과 같은 것을 통해 파이프를 통해 검색 및 교체를 수행 할 수 있습니다.
— El Yobo

23
실제로는 주제에서 벗어난 것이 아니며 많은 프로그래머가 때때로 UI 편집기를 보완하기 위해 vim을 사용합니다. 주제 질문은 실제 문제에 관한 것입니다. 우리 모두는 이런 종류의 작업에 대해 두 가지 좋은 스위스 군대 도구만을 알고 있으므로 vim을 너무 이국적이거나 외부 사이트로 취급하지 마십시오. 그래서 사람을위한 것입니다.
— Sławomir Lenart

닫는 대신 SuperUser 또는 Linux / Unix 또는 VIM으로 이동하지 않는 이유는 무엇입니까?
— user1271772

답변:


72

당신이 * nix에서 스크립트에있는 (그리고 거의) 전용 파일의 일부 (그리고 수정해야 가정) 경우합니다 (사용하여 파일을 분할 할 수 split개별적으로 편집해야합니다 (사용 명령) awk, sed또는 비슷한)하고 후에을 연결 완료되었습니다.

cat file2 file3 >> file1

10
좋은 팁. 나는 13GB (152.000.000 라인)의 sql-file을 가지고 있었고, "split -l 1000000"을 사용한 다음 내가 원하는 곳에 1 백만 라인 파일을 vim으로 편집하는 것이 훌륭하게 작동했습니다. 분할하는 데 10 분이 걸렸습니다. (나는 정력과 일이 원본 파일을 열려고하지만 사용할 수 너무 느렸다.)
— Claes가 모 그렌

149

Ctrl-C는 파일로드를 중지합니다. 파일이 충분히 작 으면 모든 내용을로드하고로드 후 단계를 종료 한 것이 운이 좋았을 수 있습니다. 이 팁을 사용할 때 전체 파일이로드되었는지 확인하십시오.

Vim은 대용량 파일을 매우 잘 처리 할 수 ​​있습니다. 3.4GB 파일을 편집하고 줄을 삭제하는 등의 작업을했습니다. 명심해야 할 세 가지 사항 :

  1. Ctrl-C를 누르십시오. Vim은 처음에 전체 파일을 읽고, 구문 강조 표시 및 파일의 줄 수 등과 같은 작업을 수행합니다. Ctrl-C는이 열거 (및 구문 강조 표시)를 취소하고 화면에 표시하는 데 필요합니다.
  2. 읽기 전용 : Vim은 파일이 너무 커서. 편집을 수행 할 파일 복사. 나는 w했다! 파일을 저장하는 데 가장 많은 시간이 소요되었습니다.
  3. 줄로 이동 : 입력 :115355하면 115355 줄로 바로 이동합니다. 이는 대용량 파일에서 훨씬 더 빠릅니다. Vim은 줄 버퍼를로드 할 때마다 처음부터 스캔을 시작하는 것처럼 보이며 파일을 스캔하기 위해 Ctrl-F를 누르고 있으면 끝 부분에서 정말 느려진 것 같습니다.

참고-Ctrl-C를 눌러 Vim 인스턴스가 읽기 전용 인 경우 Vim이 전체 파일을 버퍼에로드하지 않았을 수 있습니다. 이 경우 저장하면 전체 파일이 아닌 버퍼에있는 내용 만 저장됩니다 . a G를 사용하여 끝으로 건너 뛰어 파일의 모든 행이 있는지 빠르게 확인할 수 있습니다 .


14
이 조언을 사용하여 vim에서 44GB의 wikipedia xml 덤프를 처리 할 수있었습니다. (ctrl-c).
— vancan1ty 2013

1
Windows에서 2.5GB 로그 파일의 끝을 읽으려고했습니다. gvim에서 열면 할당 된 2GB 메모리를 초과하면 메모리 부족 오류가 발생했습니다. ctrl-c 트릭을 시도 할 때 파일을 메모리로로드하는 것을 중지했지만 gvim이로드 할 수있는 파일의 일부만 볼 수있었습니다. 따라서 ctrl-c를 누르기 전에 오래 기다릴수록 더 많은 파일을 볼 수 있습니다. 파일 끝으로 이동하거나 파일의 나머지 부분을로드하는 것은 불가능했습니다 (또는 방법을 몰랐습니다). vim이 작업에 적합하지 않다는 점에 다소 실망 스럽습니다. (결국 무료 전용 도구를 사용하여 파일을 100MB 파일로 분할했습니다.
— slawek

14
나를 위해 작동하지 않습니다. 3GB 파일을로드하고 ctrl-c를 누르면 내용이 표시됩니다. 스크롤 등을 편집 할 수 있지만로드 된 부분의 끝에 도달하면 (5 %라고 가정 해 보겠습니다) 더 이상로드되지 않습니다.
— Patryk 2014

1
확인 됨, user3338098. Ctrl-C를 누르고 전체 파일을로드하지 않는 경우 (다른 사용자가 설명했듯이) 저장하면로드 한 내용 만 저장됩니다. 이것이 아마도 처음에 읽기 전용으로 들어가는 이유 일 것입니다. 내 읽기 전용 포인트를 업데이트하여이를 확인하겠습니다.
— Aaron R.

16
이 지침을 따르면 방금 다운로드 한 대용량 파일이 손상되었습니다. 기본적으로 데이터 손실을 유발하는 지침을 제공하므로 포인트 2를 완전히 제거해야합니다. 이는 게시물이 끝날 때까지 언급하지 않습니다.
— Neobyte 2015-08-22

75

질식을 일으키는 플러그인 일 수 있습니다. (구문 강조, 접기 등)

플러그인없이 vim을 실행할 수 있습니다.

vim -u "NONE" hugefile.log

미니멀하지만 최소한 익숙한 vi 동작을 제공합니다.

syntax off

또 다른 명백한 것입니다. 설치를 정리하고 필요한 것을 소싱하십시오. 그것이 무엇을 할 수 있는지, 그리고 다른 수단을 통해 작업을 수행해야하는지 알 수 있습니다.


3
이것은 여전히 ... RAM에 전체 파일을로드
— Totor

@Totor 예, 먼저 파일을 분할했지만 해당 설정은 무작위 자동 명령을 해제하여 최고의 vim 성능을 빠르게 제공합니다. 그게 내 요점이었다. 적절한 메모리를 가진 워크 스테이션은 공연에 가까운 파일을 처리 할 수 ​​있어야합니다.
— michael

2
그래서 vim / vi는 파일이 가상 메모리 크기의 10 배일 때 쓸모가 없습니까?
— user3338098

1
이 명령을 사용하여 2 초 이내에 250MB 파일을 열었습니다. 놀라운
— user674669

20

split + vim 솔루션을 사용하여 @Al pachio가 제공 한 답변에 약간의 개선 사항이 있습니다. 파일 청크를 버퍼로 효과적으로 사용하여 glob으로 파일을 읽을 수 있습니다.

$ split -l 5000 myBigFile
xaa
xab
xac
...

$ vim xa*
#edit the files

:nw  #skip forward and write
:n!  #skip forward and don't save 

:Nw  #skip back and write
:N!  #skip back and don't save


8

나는 SQL 덤프를 약간 변경해야 할 때 주로 약 1GB의 파일을 사용하여 그렇게하려고했습니다. 저는 Windows를 사용하므로 큰 고통을 겪습니다. 심각하게 어렵습니다.

분명한 질문은 "왜 필요합니까?"입니다. 내가 두 번 이상이 더 시도 할 필요가 경험에서 말할 수 있습니다, 당신은 아마 정말 다른 방법을 찾으려고합니다.

그래서 어떻게하나요? 내가 한 몇 가지 방법이 있습니다. 때로는 vim 또는 nano를 사용하여 파일을 열 수 있으며 사용할 수 있습니다. 정말 힘든 고통이지만 효과가 있습니다.

그것이 작동하지 않으면 (귀하의 경우처럼) 몇 가지 옵션 만 있습니다. 필요한 변경 (예 : 검색 및 바꾸기)을 수행하는 작은 프로그램을 작성할 수 있습니다. 이를 수행 할 수있는 명령 줄 프로그램을 사용할 수 있습니다 (아마도 sed / awk / grep / etc로 수행 할 수 있습니까?).

그래도 작동하지 않으면 파일을 청크로 분할 한 다음 ( 분할 이 확실한 선택이지만 헤드 / 테일을 사용하여 원하는 부분을 얻을 수 있음) 필요한 부분을 편집 할 수 있습니다. 나중에 재결합합니다.

그래도 나를 믿고 다른 방법을 찾으십시오.


3
보통 sed는 이런 경우에 당신의 친구입니다. 편집자는 파일 상단에 몇 개의 문자를 삽입하고 다른 모든 항목을 아래로 밀어내는 방법을 알아내는 것을 정말 좋아하지 않습니다.
— dkretz

@le dorfier : 네. 검색 / 교체를해야 할 때 sed를 사용했습니다. 그런 파일에서 몇 줄을 삭제해야했을 때 (정말 긴 줄 몇 개 ) vim에서 할 수 있었지만 줄 사이를 이동하는 것 (실제 삭제도 마찬가지 임)은 시간이 많이 걸렸습니다. (응답하고 다시 그리는 데 초 이상). 나는 그 줄 중 하나에 몇 글자도 추가하고 싶지 않습니다.
— MBCook

정확히 동일한 문제 .... 큰 테이블 또는 대상 시스템에 존재하지 않는 파일 그룹에 대한 SQL 스크립트 맨 위에있는 "using"문. 나는 Free File Splitter를 사용하여 그들을 파열시키고 아래의 명령 줄을 다시 결합합니다.
— EBarr

6

16 진 편집기가 대용량 파일을 처리하는 것이 합리적으로 일반적이라고 생각합니다. Windows에서는 최대 8EB (80 억 기가 바이트)의 파일을 처리한다고 주장 하는 HxD 를 사용합니다.


14
나는 그들이 그것을 어떻게 테스트했는지 알고 싶습니다 ... : P
— Shadow

리눅스에서 나는 추천한다hexedit
— elig

4

저는 Charles Campbell 의 LargeFile 플러그인 과 함께 Win7 x64에서 vim 7.3.3을 사용하여 멀티 기가 바이트의 일반 텍스트 파일을 처리하고 있습니다. 정말 잘 작동합니다.

당신이 바로 오길 바랍니다.


플러그인을 비활성화하려면 어떻게해야합니까? 예를 들어 Vim에서 파일을 열 때 강조 표시와 같은 다른 모든 확장 기능이 다시 작동하도록 하시겠습니까?
— hhh

3

와우, 1GB 또는 2GB로도 vim이 질식하지 못했습니다. UltraEdit (Windows) 및 BBEdit (Mac)이 훨씬 더 큰 파일에 더 적합하다고 들었지만 개인적인 경험은 없습니다.




2

초대형 로그 파일을 위해 FAR Commander의 내장 편집기 / 뷰어를 사용했습니다.



1

제가 그런 것에 사용할 수 있었던 유일한 것은 제가 가장 좋아하는 Mac 헥스 편집기 인 0XED입니다. 그러나 그것은 수십 메가 바이트에서 큰 파일이라고 생각했습니다. 얼마나 멀리 갈지 모르겠습니다. 그래도 한 번에 파일의 일부만 메모리에로드한다고 확신합니다.


0

과거에는 파일이 매우 커질 때 분할 / 편집 / 결합 방식을 성공적으로 사용했습니다. 이 작업을 수행하려면 원본 파일에서 편집 할 텍스트의 위치를 ​​알아야합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.