我想问一下'| 是否有开箱即用的多核等效项 排序 | 唯一的-c | 排序 -n' 命令?
我知道我可以使用以下程序
split -l5000000 data.tsv '_tmp';
ls -1 _tmp* | while read FILE; do sort $FILE -o $FILE & done;
sort -m _tmp* -o data.tsv.sorted
但是味道有点重口味。
我想问一下'| 是否有开箱即用的多核等效项 排序 | 唯一的-c | 排序 -n' 命令?
我知道我可以使用以下程序
split -l5000000 data.tsv '_tmp';
ls -1 _tmp* | while read FILE; do sort $FILE -o $FILE & done;
sort -m _tmp* -o data.tsv.sorted
但是味道有点重口味。
GNU
sort
有一个--parallel
标志:这将使用八个并发进程/线程来执行两个排序步骤中的每一个。该
uniq -c
部分仍将使用单个进程。正如 Stéphane Chazelas 在评论中指出的那样,GNU 的实现
sort
已经并行化(它使用 POSIX 线程),因此只有在您希望它使用比您拥有的内核更多或更少的线程时才需要修改并发线程的数量。请注意
sort
,由于该步骤,第二个可能会比第一个获得更少的数据uniq
,因此它会更快。--buffer-size=SIZE
您还可以(可能)通过使用和来提高排序速度--batch-size=NMERGE
。请参阅sort
手册。为了进一步加快排序速度,请确保
sort
将其临时文件写入快速文件系统(如果您连接了多种类型的存储)。您可以通过将TMPDIR
环境变量设置为此类挂载点(或使用sort -T directory
)上可写目录的路径来执行此操作。这对我来说更快。YMMV(这绝对取决于有多少重复):