2017-07-27 4 views
0

私は非常に大きなデータファイルを持っています(255G; 3,192,563,934行)。残念ながら私はデバイス上に204Gの空き容量しか持っていません(他のデバイスは使用できません)。私は無作為のサンプルを作成し、与えられた、例えば100K行で、約10K個のユニークな行があることを発見しました...しかし、ファイルはソートされていません。Linuxの非常に大きなファイルから一意の行を取得する方法は?

通常、私が使用する、と言う:

pv myfile.data | sort | uniq > myfile.data.uniq 

とちょうどそれが一日かそこらのために実行してみましょう。この場合、一時ファイル用のデバイスに十分な空き容量がないため、これは機能しません。

私はsplitをおそらく使用して、おそらく12034本のストリーミングを新しいファイルに一度に500K行でストリーミングすると考えていました。そんなことをする方法はありますか?

私は

tail -100000 myfile.data | sort | uniq >> myfile.uniq && trunc --magicstuff myfile.data 

ような何かを行うことができるかもしれないと思ったが、私は適切にファイルを切り詰めるための方法を考え出すことができませんでした。代わりにsort | uniq

+0

'sort -u'を使用してください。これはおそらくそれについてはスマートなので、推定される10%の仮空間しか使用しません。 –

+0

@thatotherguy oooh ...私はそのオプションについて知らなかった。私はそれに渦を立てます。 –

+0

私は問題がソートコマンドであると思う、あなたがそれをソートするために利用可能なスペースのファイルサイズを必要とするので... –

答えて

1

使用sort -uこれはsortは、以前の重複を破棄することを可能にする、とGNU coreutilsのこれを利用するのに十分なスマートです。

+0

これは私のために非常にうまくいった。それは無視できるディスクスペースを使用して終了しました。 –

関連する問題