サイズが4GBのファイル内に検索されたテキストを含む行を見つけるためのツールを探しています
* nixを使用する場合は、split
を使用して小さなファイルを取得し、grep、awk、...などの任意のファイルで解析することもできます。
PowerShellがインストールされている場合は、
select-string -pattern <your_string> -path <path_to_file>
おそらく速くはないでしょうが、findやfindstrのように窒息することはないでしょう。
Grepを使用します。速いものはありません。
無料ではありませんが、これがテキストファイルの場合、 BareTailPro がその役割を果たします。大きすぎてメモリに収まらないログファイル内のテキストを検索するために使用しました。 1つの利点は、テキストを表示するだけでなく、テキストファイルにジャンプできるため、ヒットの前後の行を確認できることです。
十分な頻度で実行し、ファイルが論理行に分割されている場合は、ファイルをSplunkにロードして、そこから検索できます。それはあなたがより速く(より)するために索引付けをします。
* nixではgrepを使用し、Windowsではハイエンドのテキストエディター(Notepad ++など)を使用します。
それは、アプリケーション、必要な応答時間、およびそれらの目標を達成するために何をしたいかによって異なります。
最近、私は10 GB以上、5,000万行以上のテキストファイルを使用していて、各行で特定の文字列を検索する必要がありました。標準のUnixツール「grep」でうまくいきましたが、許容できないほど長い時間(数分)かかりました。テキストをpostgreslqDB(CSVファイルで簡単にインポートできます)にインポートし、検索する必要のあるキーでインデックスを作成すると、レコードを見つけるのに1秒もかかりませんでした。
確かに、私のワークステーションはシングルコアで、4GBのRAM、4年前の2GHz CPU、5年以上前のコンシューマーPATAドライブを使用したトップヘビーファイルシステム(ZFS)しかありません。あなたのマイレージは確かに異なります。それでも、2つの方法の時差は驚異的です。
データが自由形式のテキストである場合でも、全文検索をサポートするDBにインポートし、そのような検索をサポートするために適切にインデックスを作成することを検討してください。
RAMでファイル全体をキャッシュし、高速なマシンを使用している場合でも、このサイズのファイルの線形検索を実行すると、アプリケーションによっては(もう一度)時間効率が悪くなります。
Windows CMDプロンプトには、FIND
とFINDSTR
の2つのコマンドがあります。それらはおそらくそのサイズのファイルで窒息するか、非常に遅いでしょうが、あなたはすでにそれらを持っています。
タイプhelp findstr
およびhelp find
ドキュメント用。