Chu*_*uby 7 large-files disk-usage sort parallelism
这是我现在所做的,
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
Run Code Online (Sandbox Code Playgroud)
神奇的是 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.
Run Code Online (Sandbox Code Playgroud)
这将要求您为 90G 文件提供约 180G 的免费空间,以便存储所有片段。但是,实际排序不会占用太多空间,因为您只会按 100M 块进行排序。