これが私が今していることです、
sort -T /some_dir/ --parallel=4 -uo file_sort.csv -k 1,3 file_unsort.csv
ファイルは90GBです、私はこのエラーメッセージを受け取りました
sort: close failed: /some_dir/sortmdWWn4: Disk quota exceeded
以前は-Tオプションを使用していませんでしたが、tmp dirはこれを処理するのに十分な大きさではありません。私の現在のディレクトリには、約200GBの空き容量があります。一時ファイルを並べ替えるにはまだ十分ではありませんか?
並列オプションが影響を与えるかどうかはわかりません。
問題は、ディスククォータが設定されているようであり、ユーザーが/some_dir
でそれほど多くの領域を使用する権利を持っていないことです。いいえ、--parallel
オプションはこれに影響を与えないはずです。
回避策として、ファイルを小さなファイルに分割し、それぞれを個別に並べ替えてから、もう一度1つのファイルにマージすることができます。
## 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
魔法はGNUソートの-m
オプション(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億個のチャンクで並べ替えるだけなので、それほど多くのスペースは必要ありません。