这就是我现在所做的,
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 的可用空间。排序临时文件还不够吗?
我不知道并行选项是否会影响事情。
答案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
神奇的是 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 块进行排序。