Disk-Usage
對大型 CSV 文件 (90GB) 進行排序,超出磁碟配額
這是我現在做的,
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 目錄不足以處理這個問題。我目前的目錄有大約 200GB 的可用空間。排序臨時文件還不夠嗎?
我不知道並行選項是否會影響事情。
問題是您似乎設置了磁碟配額,而您的使用者無權在
/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
神奇的是 GNU sort 的
-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 的免費空間,以便儲存所有文件。但是,實際排序不會佔用太多空間,因為您只會按 100M 塊進行排序。