非常に大きな(4GB以上)テキストファイルから重複行を削除できるオープンソース(おそらく64ビット)のWindowsテキストエディタを探しています。
大きなテキストファイルから重複する行を削除するために何を使用しますか?
CygwinまたはMinGWをお持ちの場合は、おそらくこれを次の方法で実現できます。
cat file | sort | uniq >> outfile
一意の線が必要だと仮定します。これがどのように実行されるかはわかりません。なぜなら、大きなデータセットの並べ替えにはおそらく長い時間がかかるからです(または、すでに並べ替えられている場合は、その部分を省略できます)。正確には、これらのコマンドがどのように機能するか(4GBのラムかどうか)。
PilotEditを使用すると、巨大なファイル内の重複行を削除できます。
PilotEdit というツールを見つけました。これはそれを実行できました。
> 50GBファイル に関する重複した質問にもこの回答を投稿しました
すべての行が7kBより短く、cygwin/unixからbash、dd、tail、head、sed、sortがインストールされていると仮定します。
{
i=0
while LANG= dd 2>/dev/null bs=1024 skip=${i}000 if=large_text_file count=1021 \
| LANG= sed -e '1d' -e '$d' | LANG= sort -u ;
do
i=$((1+$i))
done
LANG= dd 2>/dev/null bs=1024 skip=${i}000 if=large_text_file count=1021 \
| LANG= tail -n 1
LANG= head -n 1 large_text_file
} | LANG= sort -u > your_result
これにより、ファイルが1024000バイトのチャンクに分割され、次のチャンクから3 * 7 * 1024バイト(1021では「21」)も追加されます。分割が線を切る可能性があるため、各カンクの最初(1d)と最後($ d)の線が破棄(sed)されます。
したがって、これを補うために、最後のチャンクを含むものが再度抽出され、最後の行のみが保持され(tail -n 1)、最初の行も再度抽出されます(head -n 1)。
ループが失敗すると、最後のチャンクが抽出されます。
sort -uはコンプレッサーと見なすことができますが、入力をソートしてから重複をスキップするだけです。最初の「ソート」はすべてのチャンクを圧縮します。 2番目のsort
は、これらすべてのチャンクの連結を再度圧縮します(3番目の編集以降、2番目のsort
は上記のコードから欠落しています。申し訳ありません)。
あなたはテキストファイルと言いましたが、とにかくバイナリを想定しているので、LANG =(すべてが速くなります)。