私の巨大な(最大2 GiB)テキストファイルには、その中のすべての行の約100の正確な複製が含まれています(ファイルはCSVのようなデータテーブルであるため、私の場合は役に立ちません)。
私が必要としているのは、元のシーケンスの順序を維持しながら(できれば、これを犠牲にしてパフォーマンスを大幅に向上させることができます)、すべての繰り返しを削除することです。結果として、各行は一意になります。 100行の等しい行があった場合(通常、重複はファイル全体に分散され、隣接するものにはなりません)、残りの種類は1つだけになります。
私はこれを実装するためのプログラムをScalaで作成しました(Scalaについて知らない場合はJavaと考えてください)。しかし、これをより速く行うことができる、より高速なCで記述されたネイティブツールがあるのではないでしょうか?
更新:awk '!seen[$0]++' filename
ファイルが2GiB以下である限り、ソリューションは問題なく機能しているように見えましたが、8 GiBファイルをクリーンアップしようとすると、それ以上機能しなくなります。 4GiBRAMを搭載したMacと4GiBRAMと6GiBスワップを搭載した64ビットWindows7PCでは、メモリが不足しているようです。そして、この経験を踏まえると、4GiBRAMを搭載したLinuxで試してみることに熱心ではありません。
承認された回答:
awk
#bash(Freenode)で見られる解決策:
awk '!seen[$0]++' filename