マルチギガバイトのテキストファイルを編集する方法 Vimが機能しません=([終了]


112

マルチギガバイトのテキストファイルを編集できるエディターはありますか?Vimが処理できないようです=(


非常に大きなデータ取得ファイルをvimにロードしましたが、問題なく処理されました。
ルーク

編集のニーズによっては、sedやperlのようなものにパイプして、検索と置換を実行できる場合もあります。
El Yobo

23
実際、それは話題外ではありません。多くのプログラマーはvimを使用し、UIエディターを補完するものとして使用することもあります。トピックの質問は、実際の問題についてです。私たちは皆、この種のタスクのためにこのような優れたスイス軍のツールを2つだけ知っているので、vimをあまりにもエキゾチックなものやサイト外のものとして扱わないでください。SOは人向けです。
SławomirLenart

それを閉じる代わりに、SuperUser、Linux / Unix、またはVIMに移動してみませんか?
user1271772

回答:


72

あなたは* nixの上にある(と、ファイルの一部だけを変更しない(めったに)する必要があると仮定)の場合は、(使用してファイルを分割することができるsplitコマンド)を、編集個別に(使用してawksed類似した、または何かを)した後、それらを連結完了しました。

cat file2 file3 >> file1

10
素晴らしいヒント。13GB(152.000.000行)のsqlファイルがあり、 "split -l 1000000"を使用してから、vimで必要な100万行のファイルを編集するとうまくいきました。それらを分割するだけで10分かかりました。(私はvimで元のファイルを開こうとしましたが、うまくいきましたが、遅すぎて使用できませんでした。)
Claes Mogren

149

Ctrl-Cはファイルのロードを停止します。ファイルが十分に小さい場合は、すべてのコンテンツをロードして、ポストロードステップを強制終了できたのは幸運だった可能性があります。このヒントを使用する場合は、ファイル全体がロードされていることを確認してください。

Vimは大きなファイルをかなりうまく処理できます。3.4GBファイルを編集したり、行を削除したりしました。次の3つの点に注意してください。

  1. Ctrl-Cを押す:Vimは最初にファイル全体を読み取って、構文の強調表示やファイル内の行数などを実行しようとします。Ctrl-Cは、この列挙(および構文の強調表示)をキャンセルし、画面に表示する必要があります。
  2. 読み取り専用:ファイルが大きすぎてを作成できない場合、Vimは読み取り専用で起動する可能性があります。編集を実行するファイルのコピー。しなきゃw!ファイルを保存するには、それが最も時間がかかったときです。
  3. 行に移動:入力:115355すると、行115355に直接移動します。これは、これらの大きなファイルの方がはるかに高速です。Vimは行のバッファをロードするたびに最初からスキャンを開始するようで、Ctrl-Fを押したままファイルをスキャンすると、ファイルの終わり近くで本当に遅くなるようです。

注-Ctrl-Cを押したためにVimインスタンスが読み取り専用の場合、Vimがファイル全体をバッファにロードしなかった可能性があります。その場合、ファイルを保存しても、ファイル全体ではなく、バッファ内の内容のみが保存されますGファイルのすべての行がそこにあることを確認するために、最後にスキップするためにaですばやく確認することができます。


14
このアドバイスを使用して、vimで44ギガバイトのwikipedia xmlダンプを処理できました。(ctrl-c)。
vancan1ty 2013

1
Windowsで2.5GBのログファイルの最後を読み込もうとしました。割り当てられた2GBのメモリを超えると、gvimで開くとメモリ不足エラーが発生しました。ctrl-cトリックを試みると、メモリへのファイルのロードが停止しましたが、gvimがロードできるファイルの部分のみを表示できました。そのため、ctrl-cを押すまでの待ち時間が長くなるほど、表示されるファイルが多くなります。ファイルの終わりに移動するか、ファイルの残りの部分をロードすることは不可能でした(または私は方法がわかりませんでした)。ちょっとのvimは、タスクまではなかったことを残念:。(私は100メガバイトのファイルにファイルを分割するために、いくつかの無料の専用ツールを使用最後に
slawek

14
私にはうまくいきません。3GBのファイルをロードし、ctrl-cを押すと、内容が表示されます。スクロールなどを編集できますが、ロードされた部分の最後(5%としましょう)に到達すると、もうロードされません(最初にロードされたファイルの一部で、ctrl-cを押すまでスタックします)。
Patryk 2014

1
確認済み、user3338098。Ctrl-Cを押してもファイル全体がロードされない場合(他の人が話したように)、ファイルを保存しても、ロードした内容のみが保存されます。それがおそらくそもそも読み取り専用になる理由です。読み取り専用ポイントを更新して、その点に注意します。
アーロンR.

16
これらの指示に従うと、ダウンロードしたばかりの巨大なファイルが破壊されました。ポイント2は基本的にデータ損失の原因となる指示を提供するため、完全に削除する必要があります。これは投稿の最後まで触れません。
Neobyte

75

それはそれを窒息させているプラ​​グインであるかもしれません。(構文の強調表示、折り目など)

プラグインなしでvimを実行できます。

vim -u "NONE" hugefile.log

それはミニマリストですが、少なくとも慣れ親しんだviモーションを提供します。

syntax off

別の明白なものです。インストールを削減し、必要なものを調達します。あなたはそれが何ができるのか、そしてあなたが他の手段でタスクを達成する必要があるかどうかを知るでしょう。


3
これでもファイル全体がRAMに読み込まれます...
Totor

@Totorええ、私は最初にファイルを分割しますが、その設定はランダムな自動コマンドをオフにすることですぐに最高のvimパフォーマンスを提供します。それが私のポイントでした。まともなメモリを備えたワークステーションは、ギグに近づくファイルを処理できるはずです。
マイケル2013年

2
ファイルが仮想メモリのサイズの10倍の場合、vim / viは役に立たないのですか?
user3338098

1
このコマンドを使用して、250MBのファイルを2秒未満で開きました。すばらしい
user674669

20

@Al pachioによって提供されたスプリット+ vimソリューションを使用して回答をわずかに改善し、ファイルチャンクをバッファーとして効果的に使用して、グロブでファイルを読み取ることができます。

$ 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ダンプにいくつかの小さな変更を加える必要があるときに、主に約1 GBのファイルでそれを試みました。私はWindowsを使用しているので、これは大きな痛みになります。本当に難しいです。

明白な質問は、「なぜあなたはする必要があるのですか?」です。私は何度もこの多くを試してみた経験からあなたを伝えることができ、あなたはおそらく、本当に別の方法を見つけるために試してみたいです。

それで、どうやってそれを行うのですか?私がそれをしたいくつかの方法があります。vimまたはnanoでファイルを開くことができ、それらを使用できる場合があります。それは本当に大変なことですが、うまくいきます。

それが(あなたの場合のように)うまくいかないときは、いくつかのオプションしかありません。小さなプログラムを作成して、必要な変更を加えることができます(たとえば、検索と置換)。あなたはそれを行うことができるかもしれないコマンドラインプログラムを使うことができます(多分それはsed / awk / grep / etcで達成できるでしょうか?)

これらが機能しない場合は、常にファイルをチャンクに分割し分割のようなものは当然の選択ですが、ヘッド/テールを使用して必要なパーツを取得できます)、それを必要とするパーツを編集します。後で再結合します。

でも私を信じて、別の方法を見つけてみてください。


3
通常、sedはこのような場合の友達です。エディターは、ファイルの先頭にいくつかの文字を挿入し、他のすべてを押し下げる方法を考え出すことを本当に嫌いです。
dkretz 2009年

@le dorfier:うん。検索/置換を行う必要があるときに、sedを使用しました。そのようなファイルからいくつかの行を削除する必要があったとき(いくつかの非常に長い行)はvimでそれをなんとかしましたが、行間を移動すること(および実際の削除)にはかなりの時間がかかりました(応答して再描画する秒数+)。それらの行の1つに数文字も追加したくありません。
MBCook 2009年

まったく同じ問題.... SQLスクリプトの上部にある大きなテーブルの「using」ステートメント、またはターゲットシステムに存在しないファイルグループ。私はFree File Splitterを使用してそれらをバストアップし、以下のコマンドラインを使用して再結合します。
EBarr 2015

6

16進数エディターが巨大なファイルを処理することは、かなり一般的だと思います。Windowsでは、最大8 EB(80億ギガバイト)のファイルを処理すると主張するHxDを使用しています。


14
彼らがそれをどのようにテストしたか知りたいです...:P
Shadow

Linuxでは私がお勧めしますhexedit
elig

4

マルチギガバイトのプレーンテキストファイルを処理するために、Charles CampbellよるLargeFileプラグインを備えたWin7 x64でvim 7.3.3を使用しています。それは本当にうまくいきます。

正しくお越しください。


どうすればプラグインを無効にできますか?たとえば、Vimでファイルを開いているときに、強調表示などの他のすべての拡張機能が再び機能するようにしますか?
2017年

3

うわー、1 GBや2 GBでもvimを窒息させることができませんでした。UltraEdit(Windowsの場合)とBBEdit(Macの場合)はさらに大きなファイルに適していると聞きましたが、個人的な経験はありません。




2

FAR Commanderの組み込みエディター/ビューアーを使用して、非常に大きなログファイルを作成しました。



1

私がそのようなものに使用できる唯一のことは、私のお気に入りのMac hexエディター、0XEDです。しかし、それは私が数十メガバイトと大きいと考えたファイルの場合でした。どこまで行くのかわかりません。ただし、一度にメモリに読み込まれるのはファイルの一部のみであると確信しています。


0

以前は、ファイルが非常に大きくなるとき、分割/編集/結合のアプローチをうまく使用しました。これが機能するためには、編集するテキストが元のファイルのどこにあるかを知る必要があります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.