AIOps 一场颠覆传统运维的盛筵
1023
2023-02-14
利用多核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 |
然后你可以使用管道把输出存储到指定的文件里。
发表评论
评论列表