Emacs: 큰 파일에서 X와 Y 줄 사이의 모든 줄을 포함하는 버퍼를 엽니다.

Emacs: 큰 파일에서 X와 Y 줄 사이의 모든 줄을 포함하는 버퍼를 엽니다.

다른 질문과 같은 정신으로:큰 파일의 X 줄을 Y 줄로 분류:

열 수 있는 방법이 있나요Emacs 내에서(그리고 버퍼에 표시) 거대한 텍스트 파일에서 주어진 행 세트(예: X행과 사이의 모든 행 )를 표시합니까?Y

예를 들어 파일을 열고 버퍼의 57890000 줄과 57890010 줄 사이의 모든 줄을 표시합니다.huge.txt

고쳐 쓰다: 최소한 행을 읽기 전용(표시 목적으로만)으로 여는 솔루션에 관심이 있습니다. 행을 편집하고 원본 파일에 저장할 수도 있다면 좋을 것입니다.

답변1

전체 파일을 열지만(필수) 편집기 창에는 일부만 표시하려면 다음을 사용하세요.축소. 처리할 버퍼 부분을 선택하고 C-x n n( narrow-to-region)를 누르세요. 명령을 비활성화하라는 메시지가 나타나면 "예"라고 말합니다. 전체 버퍼를 다시 보려면 C-x n w( )를 누르십시오 . widen버퍼를 저장하면 전체 파일이 선택됩니다. 모든 데이터는 그대로 남아 있으므로 범위를 좁히면 표시되는 내용이 제한됩니다.

파일의 일부를 보려면 현재 버퍼에 삽입하면 됩니다.shell-command접두사가 붙은 매개변수( M-1 M-!)필요한 줄을 추출하는 데 적합한 명령,예를 들어 <huge.txt tail -n +57890001 | head -n 11.

Lisp 기능도 있습니다insert-file-contents바이트 범위를 사용할 수 있습니다. 당신은 그것을 사용할 수 있습니다 M-:(eval-expression):

(insert-file-contents "huge.txt" nil 456789000 456791000)

정수 크기 제한이 발생할 수 있습니다(버전 및 플랫폼에 따라 확인하시기 바랍니다).most-positive-fixnum).

이론적으로는 필요에 따라 파일의 일부를 투명하게 로드하고 저장하는 Emacs 모드를 작성하는 것이 가능합니다(비록 정수 크기 제한으로 인해 32비트 시스템에서 실제 파일 오프셋을 사용할 수는 없지만). 내가 아는 한, 이 방향으로의 유일한 노력은 다음과 같습니다.매우 낮은 주파수(GitHub 링크여기).

답변2

당신은 이것을 찾을 수 있습니다펄과 엘리스프조합이 작동합니다. 이를 통해 데이터를 버퍼로 파이프할 수 있습니다. 동일한 버퍼 이름을 사용한 후속 호출은 동일한 버퍼에 새 줄을 추가합니다.

"수정"할 수 있습니다완충기하지만 편집 내용은 소스(즉,관로) ...행 번호는 표시되지 않지만 각 행의 번호 접두어를 포함하도록 입력을 조정할 수 있습니다.

from=50000000
  to=50000010
<file_50 head -n "$to" | tail -n +"$from" | e-sink.pl

버퍼에서:

<<<<< start: 2012-09-09T01:39:49
1000000
VSjU K97X5Z dFcc ZZd2OqQ PzbnphT
yQBTt LOic Ks sPXrq tty oy
dA8 SD BvO daZ KFPr44X
X0m3BI eR4go YjFp7e vbJr3oe Y0OGgH3 uPfz yfq59
we rm L9iD ugcJBND daS

7pO lwUFzNE HPlPW fmPZ vpRs Rx EFeHaFM
b0 1B ncr Db324 vwO Un34R
HDZS wq9zg W013 5JGly
kAfP QPpjjyh pXMAw I1 CGKDc23 qCBnP
<<<<<   end: 0.630s

또는 줄 번호를 추가하세요.

from=50000000
  to=50000010
<file_50 head -n "$to" | tail -n +"$from" | nl -v$from -ba -w${#to} | e-sink.pl

버퍼에서:

<<<<< start: 2012-09-09T01:53:44
50000000    1000000
50000001    VSjU K97X5Z dFcc ZZd2OqQ PzbnphT
50000002    yQBTt LOic Ks sPXrq tty oy
50000003    dA8 SD BvO daZ KFPr44X
50000004    X0m3BI eR4go YjFp7e vbJr3oe Y0OGgH3 uPfz yfq59
50000005    we rm L9iD ugcJBND daS
50000006    
50000007    7pO lwUFzNE HPlPW fmPZ vpRs Rx EFeHaFM
50000008    b0 1B ncr Db324 vwO Un34R
50000009    HDZS wq9zg W013 5JGly
50000010    kAfP QPpjjyh pXMAw I1 CGKDc23 qCBnP
<<<<<   end: 0.768s

나는 이것을 찾았다스택오버플로우 Q&A

답변3

당신은 이것을 할 수 있습니다대용량 파일 보기, 이 상황을 위해 특별히 설계된 작은 emacs 모드입니다.

관련 정보