原网站:
Parallel并行命令加速执行#原始网址失效
Parallel并行命令加速执行
还是值得学习下,目前还没熟悉,每天看一看吧,实际多应用
GNU Parallel会把输入分块,然后通过管道并行的执行;
BZIP2
bzip2是比gzip更好的压缩工具,但它很慢!别折腾了,我们有办法解决这问题。
以前的做法:
`cat` `bigfile.bin |` `bzip2` `--best > compressedfile.bz2`
现在这样:
`cat` `bigfile.bin | parallel --pipe --recend` `''` `-k` `bzip2` `--best > compressedfile.bz2`
GREP
如果你有一个非常大的文本文件,以前你可能会这样:
`grep` `pattern bigfile.txt`
现在你可以这样:
`cat` `bigfile.txt | parallel --pipe` `grep` `'pattern'`
或者这样:
`cat` `bigfile.txt | parallel --block 10M --pipe` `grep` `'pattern'`
这第二种用法使用了 –block 10M参数,这是说每个内核处理1千万行——你可以用这个参数来调整每个CUP内核处理多少行数据。
AWK
下面是一个用awk命令计算一个非常大的数据文件的例子。
常规用法:
`cat` `rands20M.txt |` `awk` `'{s+=$1} END {print s}'`
现在这样:
`cat` `rands20M.txt | parallel --pipe` `awk` `\``'{s+=\$1} END {print s}\' | awk '``{s+=$1} END {print s}'`
这个有点复杂:parallel命令中的–pipe参数将cat输出分成多个块分派给awk调用,形成了很多子计算操作。这些子计算经过第二个管道进入了同一个awk命令,从而输出最终结果。第一个awk有三个反斜杠,这是GNU parallel调用awk的需要。
WC
想要最快的速度计算一个文件的行数吗?
传统做法:
`wc` `-l bigfile.txt`
现在你应该这样:
`cat` `bigfile.txt | parallel --pipe` `wc` `-l |` `awk` `'{s+=$1} END {print s}'`
非常的巧妙,先使用parallel命令‘mapping'出大量的wc -l调用,形成子计算,最后通过管道发送给awk进行汇总。
SED
想在一个巨大的文件里使用sed命令做大量的替换操作吗?
常规做法:
`sed` `s^old^new^g bigfile.txt`
现在你可以:
`cat` `bigfile.txt | parallel --pipe` `sed` `s^old^new^g`
然后你可以使用管道把输出存储到指定的文件里。
使用 –no-run-if-empty 来跳过空行:
`(``echo` `1;` `echo``;` `echo` `2) | parallel --no-run-``if``-empty` `echo`
网友评论