首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >多核等价物-用于“溶胶-排序- uniq -c -排序-n”命令

多核等价物-用于“溶胶-排序- uniq -c -排序-n”命令
EN

Unix & Linux用户
提问于 2018-06-29 06:23:40
回答 2查看 2.5K关注 0票数 6

我想问一下,是否有一个开箱即用的多核等价物来执行一个‘溶胶-排序-- uniq -c --排序-n’命令?

我知道我可以使用下面程序

代码语言:javascript
复制
split -l5000000 data.tsv '_tmp';
ls -1 _tmp* | while read FILE; do sort $FILE -o $FILE & done;
sort -m _tmp* -o data.tsv.sorted

但尝起来有点过火。

EN

回答 2

Unix & Linux用户

回答已采纳

发布于 2018-06-29 06:31:00

GNU sort有一个--parallel标志:

代码语言:javascript
复制
sort --parallel=8 data.tsv | uniq -c | sort --parallel=8 -n

这将使用八个并发进程/线程来执行两个排序步骤中的每一个。uniq -c部件仍将使用单个进程。

正如Stéphane Chazelas在评论中指出的那样,sort的GNU实现已经被并行化(它使用POSIX线程),因此,只有当您希望它使用的线程多于内核时,才需要修改并发线程的数量。

请注意,由于使用sort步骤,第二个uniq可能会比第一个获得更少的数据,因此它将更快。

您还可以(可能)通过使用--buffer-size=SIZE--batch-size=NMERGE来提高排序速度。请参阅sort手册。

为了进一步加快排序速度,请确保sort将其临时文件写入快速文件系统(如果您附带了几种类型的存储)。您可以通过将TMPDIR环境变量设置为这种挂载点上可写目录的路径(或者使用sort -T directory)来做到这一点。

票数 10
EN

Unix & Linux用户

发布于 2018-08-14 23:02:56

这对我来说更快。YMMV (这肯定取决于有多少副本):

代码语言:javascript
复制
parallel --lb --pipepart --block 15m -a /tmp/big.file 'sort | uniq -c' |
  awk '{ count[$2] += $1 } END { for(elem in count) print count[elem], elem }' |
  sort -n
票数 0
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/452569

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档