これが私が今やっていることです。
sort -T /some_dir/ --parallel=4 -uo file_sort.csv -k 1,3 file_unsort.csv
ファイルサイズは90 GBですが、このエラーメッセージが表示されます。
sort: close failed: /some_dir/sortmdWWn4: Disk quota exceeded
以前は-Tオプションを使用していませんでしたが、明らかにtmpディレクトリはそれを処理するのに十分な大きさではありませんでした。現在のディレクトリには約200GBの空き容量があります。一時ファイルをソートするだけでは十分ではありませんか?
並列オプションが状況に影響を与えるかどうかわかりません。
ベストアンサー1
問題は、ディスククォータを設定したようですが、ユーザーがあまりにも多くのスペースを占有する権限がないことです/some_dir
。いいえ、この--parallel
オプションはこれには影響しません。
回避策として、ファイルを小さなファイルに分割し、各ファイルを別々に並べ替えてから、単一のファイルに再びマージすることができます。
## split the file into 100M pieces named fileChunkNNNN
split -b100M file fileChunk
## Sort each of the pieces and delete the unsorted one
for f in fileChunk*; do sort "$f" > "$f".sorted && rm "$f"; done
## merge the sorted files
sort -T /some_dir/ --parallel=4 -muo file_sort.csv -k 1,3 fileChunk*.sorted
魔法は-m
GNUソートオプションですinfo sort
。
‘-m’
‘--merge’
Merge the given files by sorting them as a group. Each input file
must always be individually sorted. It always works to sort
instead of merge; merging is provided because it is faster, in the
case where it works.
これを行うには、すべての部品を保存するために90Gファイルに約180Gの空き容量を提供する必要があります。しかし、実際のソートは1億チャンクだけでソートされるため、多くのスペースを占有しません。