猿问

UNIX排序命令如何排序一个非常大的文件?

UNIX sort命令可以像这样对一个非常大的文件进行排序:


sort large_file

排序算法是如何实现的?


为什么它不会导致过多的内存消耗?



缥缈止盈
浏览 634回答 3
3回答

不负相思意

UNIX Sort命令的算法细节说Unix Sort使用外部R-Way合并排序算法。链接进入更多细节,但实质上它将输入分成较小的部分(适合内存),然后在结尾处将每个部分合并在一起。

手掌心

该sort命令将工作数据存储在临时磁盘文件中(通常在/tmp)。

月关宝盒

警告:此脚本为每个块启动一个shell,对于非常大的文件,这可能是数百个。这是我为此目的编写的脚本。在4处理器的机器上,它将分拣性能提高了100%!#! /bin/kshMAX_LINES_PER_CHUNK=1000000ORIGINAL_FILE=$1SORTED_FILE=$2CHUNK_FILE_PREFIX=$ORIGINAL_FILE.split.SORTED_CHUNK_FILES=$CHUNK_FILE_PREFIX*.sortedusage (){     echo Parallel sort     echo usage: psort file1 file2     echo Sorts text file file1 and stores the output in file2     echo Note: file1 will be split in chunks up to $MAX_LINES_PER_CHUNK lines     echo  and each chunk will be sorted in parallel}# test if we have two arguments on the command lineif [ $# != 2 ]then    usage    exitfi#Cleanup any lefover filesrm -f $SORTED_CHUNK_FILES > /dev/nullrm -f $CHUNK_FILE_PREFIX* > /dev/nullrm -f $SORTED_FILE#Splitting $ORIGINAL_FILE into chunks ...split -l $MAX_LINES_PER_CHUNK $ORIGINAL_FILE $CHUNK_FILE_PREFIXfor file in $CHUNK_FILE_PREFIX*do    sort $file > $file.sorted &donewait#Merging chunks to $SORTED_FILE ...sort -m $SORTED_CHUNK_FILES > $SORTED_FILE#Cleanup any lefover filesrm -f $SORTED_CHUNK_FILES > /dev/nullrm -f $CHUNK_FILE_PREFIX* > /dev/null
随时随地看视频慕课网APP
我要回答