他の質問と同じ精神で:大きなファイルの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モードです。