我们都知道grep、bzip2、wc、awk、sed等都是单线程的,只能使用一个CPU核心。那么我们如何使用这些内核呢?要使Linux命令使用所有CPU内核,我们需要使用GNUParallel命令,它允许我们所有的CPU内核在一台机器上执行神奇的map-reduce操作。当然,这也需要借助很少用到的--pipes参数(又名--spreadstdin)。这样一来,您的负载就会均匀分布在CPU上,真的。BZIP2bzip2是一个比gzip更好的压缩工具,但是它很慢!不用担心,我们有办法解决这个问题。以前的做法:catbigfile.bin|bzip2--best>compressedfile.bz2现在:catbigfile.bin|parallel--pipe--recend''-kbzip2--best>compressedfile.bz2特别是对于bzip2,GNUparallelinmulti-core是的在CPU上超快。一不留神,就会被处死。GREP如果你有一个非常大的文本文件,你曾经这样做:greppatternbigfile.txt现在你可以这样做:catbigfile.txt|parallel--pipegrep'pattern'或者这样:catbigfile.txt|parallel--block10M--pipegrep'pattern'的第二种用法使用了--block10M参数,这意味着每个核心处理1000万行-您可以使用此参数来调整每个CUP核心处理多少行数据。AWK下面是一个使用awk命令计算一个非常大的数据文件的例子。常规用法:catrands20M.txt|awk'{s+=$1}END{prints}'现在:catrands20M.txt|parallel--pipeawk\'{s+=\$1}END{prints}\'|awk'{s+=$1}END{prints}'这个有点复杂:parallel命令中的-pipe参数将cat的输出分成多块分配给awk调用,形成很多子计算操作。这些子计算通过第二条管道传输到同一个awk命令,输出最终结果。第一个awk有三个反斜杠,这是GNUparallel需要调用awk的。WC是不是要以最快的速度计算一个文件的行数?传统方法:wc-lbigfile.txt现在你应该这样做:catbigfile.txt|parallel--pipewc-l|awk'{s+=$1}END{prints}'很巧妙,先用并行命令'映射'到产生大量的wc-l调用形成子计算,最后通过pipelines发送给awk进行汇总。SED想使用sed命令在一个巨大的文件中做很多替换?常规:seds^old^new^gbigfile.txt现在您可以:catbigfile.txt|parallel--pipeseds^old^new^g...then您可以将输出通过管道传输到指定文件。
