GNU/Linux >> Linux の 問題 >  >> Linux

テキストファイル内の重複行を削除するにはどうすればよいですか?

私の巨大な(最大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

Linux
  1. ファイル(タブとスペースを含む)から空白行を削除する方法は?

  2. テキストファイル(Bash_historyなど)から「バイナリデータ」を削除するにはどうすればよいですか?

  3. 重複、わずかな変更、テキストファイルの数行?

  1. grep でテキスト ファイルの空行を削除する

  2. テキスト ファイルから改行を削除するにはどうすればよいですか?

  3. ファイルにテキストを追加するにはどうすればよいですか?

  1. 7 ファイルから重複行を削除する Linux Uniq コマンドの例

  2. Linuxコマンドを使用してプレーンテキストファイルから重複した単語を削除する方法

  3. rm を使わずにファイルを削除するには?