利用多核CPU来加速Linux命令 — awk、sed、bzip2、grep、wc

网友投稿 1023 2023-02-14

本站部分文章、图片属于网络上可搜索到的公开信息,均用于学习和交流用途,不能代表睿象云的观点、立场或意见。我们接受网民的监督,如发现任何违法内容或侵犯了您的权益,请第一时间联系小编邮箱jiasou666@gmail.com 处理。

利用多核CPU来加速Linux命令 — awk、sed、bzip2、grep、wc

BZIP2bzip2是比gzip更好的压缩工具,但它很慢!别折腾了,我们有办法解决这问题。以前的做法:

现在这样:

尤其是针对bzip2,GNU parallel在多核CPU上是超级的快。你一不留神,它就执行完成了。

GREP如果你有一个非常大的文本文件,以前你可能会这样:

1
grep pattern bigfile.txt

现在你可以这样:

1
cat bigfile.txt|parallel--pipe grep'pattern'

或者这样:

1
cat bigfile.txt|parallel--block10M--pipe grep'pattern'

这第二种用法使用了 –block 10M参数,这是说每个内核处理1千万行——你可以用这个参数来调整每个CUP内核处理多少行数据。

AWK下面是一个用awk命令计算一个非常大的数据文件的例子。常规用法:

1
cat rands20M.txt|awk'{s+=$1} END {print s}'

现在这样:

1
cat rands20M.txt|parallel--pipe awk\'{s+=\$1}END{prints}\'|awk'{s+=$1} END {print s}'

这个有点复杂:parallel命令中的–pipe参数将cat输出分成多个块分派给awk调用,形成了很多子计算操作。这些子计算经过第二个管道进入了同一个awk命令,从而输出最终结果。第一个awk有三个反斜杠,这是GNU parallel调用awk的需要。

WC想要最快的速度计算一个文件的行数吗?传统做法:

1
wc-lbigfile.txt

现在你应该这样:

1
cat bigfile.txt|parallel--pipe wc-l|awk'{s+=$1} END {print s}'

非常的巧妙,先使用parallel命令‘mapping’出大量的wc -l调用,形成子计算,最后通过管道发送给awk进行汇总。

SED想在一个巨大的文件里使用sed命令做大量的替换操作吗?常规做法:

1
seds^old^new^gbigfile.txt

现在你可以:

1
cat bigfile.txt|parallel--pipe seds^old^new^g

然后你可以使用管道把输出存储到指定的文件里。

上一篇:Zookeeper分布式集群部署
下一篇:it运维入门学什么(做it运维需要会什么)
相关文章

 发表评论

评论列表