Disk-Usage

對大型 CSV 文件 (90GB) 進行排序,超出磁碟配額

  • September 11, 2017

這是我現在做的,

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 塊進行排序。

引用自:https://unix.stackexchange.com/questions/350046