Emacs:大きなファイルで、X行とY行の間のすべての行を含むバッファを開きます。

Emacs:大きなファイルで、X行とY行の間のすべての行を含むバッファを開きます。

他の質問と同じ精神で:大きなファイルのX行をY行に分類:

開く方法はありますか?Emacs内で(そしてバッファに表示されます)巨大なテキストファイルに与えられた行のセット(例えば、X行との間のすべての行)を表示しますか?Y

たとえば、ファイルを開き、バッファの57890000行と57890010行の間のすべての行を表示します。huge.txt

修正する: 少なくとも行を読み取り専用(表示目的でのみ)として開くソリューションに興味があります。行を編集して元のファイルに保存することもできれば良いでしょう。

答え1

ファイル全体を開くが(必須)エディタウィンドウには一部のみを表示するには、以下を使用します。縮小。処理するバッファ部分を選び、C-x n nnarrow-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モードです。

関連情報