利用可能なRAM + VMより大きいファイルから選択した行を取得する

利用可能なRAM + VMより大きいファイルから選択した行を取得する

テキストファイルからフラグメントをインポートする最良の方法は何ですか?そしてたくさんその他は右サイドバーにありますほぼ繰り返す

唯一の違いは、ファイルが大きすぎて使用可能なRAM + VMに収まらないことです。したがって、私が試したことはすべて終了するまで数分間何もしないだけでなく、システムを麻痺させます。そのうちの1つは、システムがクラッシュするまで何もできませんでした。

シェルまたは他のシェルにループを作成して、行数(必須行番号)に達するまで行を読み取り、計算、削除できますが、これを実行できるコマンドはすでに存在しますか?

いくつかの操作(vim、head -X | tail -1、GUIエディタ)を試した後、あきらめてファイルを削除し、必要な行だけを提供するようにそのファイルを作成したプログラムを変更しました。

もっと詳しく見ると、スワップ領域を使用せずにRAMより大きいファイルを開きます。viがこれを行う必要があることが示唆されていますが、viが同じ場合は、数秒ではなく数分かかる作業を実行する必要があります。

答え1

あなたは試す必要がありますless

マンページから:

Also, less does not have to read the entire input file before starting, so with large input files it starts up faster than text editors like vi (1).

私は定期的に少ないリソースで大容量ファイルを開き、起動時に問題はありません。これをoptionsと組み合わせると、-jn基本的に短時間でファイルのすべての部分にアクセスできます。

かなり大きなファイルが必要だったので、これをテストしませんでしたが、ヘッダーと組み合わせると、moreスクリプトに適したファイルを使用することもできます。

more +$START_LINE_NUMBER | head -n$AMOUNT_OF_LINES

私が正しく理解した場合、ヘッダーは必要な行数を取得した後にパイプラインプロセスを完了する必要があるため、このソリューションはあなたが探しているオーバーヘッドが低いソリューションです。

関連情報