sort
Linuxで巨大なリスト(130GB)を作成しようとしています。そのうちのいくつかは次のとおりです。
@K00188:14:H2LMFBBXX:6:1101:27440:1668 1:N:0:0_I_CGATGT
@K00188:14:H2LMFBBXX:6:1101:30262:1668 1:N:0:0_I_CGATGT
@K00188:14:H2LMFBBXX:6:1101:6501:1686 1:N:0:0_I_CGATGT
@K00188:14:H2LMFBBXX:6:1101:18133:1686 1:N:0:0_I_CGATGT
@K00188:14:H2LMFBBXX:6:1101:21827:1686 1:N:0:0_I_CGATGT
問題は、その期間にRAMが不足していることですsort
。
以前の質問にはいくつかの解決策(sort --parallel
Pythonスクリプトなど)がありましたが、私の手には機能しませんでした。
続行したいが、sort
オプションを使用すると、次のエラーメッセージが表示されます。--parallel
sort: unrecognized option '--parallel=2'
Try `sort --help' for more information.
大きなリストをソートするために書かれたPythonスクリプトがある場合は、試してみたいと思います。
おすすめメニューとは何ですか?
答え1
sort
(たとえば、一部の削除された実装を除くbusybox
)は、制限された量だけを使用し、その制限に達すると一時ファイルに依存するため、メモリによって制限されません。
ディスク容量が不足する可能性が高いです。使用している準備領域に約130 GBの空きディスク容量が必要ですsort
(書き込みファイル自体を使用しない限り、結果を保存するために使用されるディスク容量に追加sort -o mybigfile mybigfile
)。
ファイルシステムに十分な空き容量がない場合は、空きディスク容量をより多くの場所/tmp
に設定します(いくつかの実装されたオプションも参照)。$TMPDIR
-T
sort
TMPDIR=~/tmp sort my-big-file > sorted
必要な一時ディスク容量を減らすために、一部のsort
実装では一時ファイルを圧縮するように指示することがあります。 CPUで使いやすいコンプレッサー(lzop
回転ディスクのファイルシステムなど)を選択すると、パフォーマンスが向上する可能性があります。
TMPDIR=~/tmp sort --compress-program=lzop my-big-file > sorted
答え2
大容量リスト(130 GB)を並べ替えようとしています。
巨大なテキストファイルを1行ずつ並べ替えたいです。
ソート: 認識できないオプション '--parallel=2'
これは録音された最近のGNU coreutilsで許可されているオプション。残念ながら、GNU corutilsはありませんが、sort
他にもあります。したがって、コンパイルしてインストールすることをお勧めします。最近 GNUコアツール、例:coreutils-8.27源泉(2017年夏)。提供されたシステムが混乱するのを防ぐために、--program-suffix=-my
スクリプトconfigure
を使用してインストールできます。sort-my
sort
(ルートがなくてもthenconfigure
などを使用できます。--prefix=$HOME/pub
make install
$HOME/pub/bin/
道....)
これが不可能な場合は、次のものを使用できます。分けるを押して、それぞれの小さなチャンクを並べ替えてマージします(使用sort --merge
)。
もう1つの可能性は、この大きなファイルを解析していくつかのファイルに入れる小さなPythonスクリプトを書くことです。SQLiteデータベース。
最新のGNUをダウンロードして使用することをお勧めします。コアツール(他の方法を使用すると時間がかかります。)これが最も実用的な方法です。ソートを実行するには、ファイルシステムに十分な追加の空き容量(150 GB程度)が必要になる場合があります。
ソースからGNUユーティリティをコンパイルしたことがない場合は、次の手順を実行することをお勧めします。
たとえば、ブラウザのcoreutilsソースtarballを使用または取得します
wget http://ftp.gnu.org/gnu/coreutils/coreutils-8.27.tar.xz
。tar xvf coreutils-8.27.tar.xz
(最新のGNU tarを使用して)解凍しました。それ以外の場合は、unzipを使用してxz -d coreutils-8.27.tar.xz
からunzipを使用してください。tar xvf coreutils-8.27.tar
GNUユーティリティをインストールするためのディレクトリの作成
mkdir $HOME/gnu/
coreutilsソースディレクトリを入力してください。
cd coreutils-8.27
コンパイル前の構成:
./configure --prefix=$HOME/gnu/ --program-suffix=-my
エラーメッセージが表示された場合は、システムを修正してみるか(Cコンパイラなどのユーティリティが欠落しているため)、助けを求めてください。読む自動設定そして構成スクリプトオプションについて学びます。
それを構築
make
インストールしてください(ビルドがうまくいったら)
make install
(上記のすべてのエントリを実行するためにroot権限は必要ありません)
- その後、ソートに使用されます
$HOME/gnu/bin/sort-my
($HOME/gnu/bin/
道簡単に入力可能sort-my
)