`
wang_2011_ying
  • 浏览: 149944 次
  • 性别: Icon_minigender_2
  • 来自: 北京
社区版块
存档分类
最新评论

如何利用多核CPU来加速你的Linux命令 — awk, sed, bzip2, grep, wc等

 
阅读更多
你是否曾经有过要计算一个非常大的数据(几百GB)的需求?或在里面搜索,或其它操作——一些无法并行的操作。数据专家们,我是在对你们说。你可能有一个4核或更多核的CPU,但我们合适的工具,例如 grep, bzip2, wc, awk, sed等等,都是单线程的,只能使用一个CPU内核。

借用卡通人物Cartman的话,“如何我能使用这些内核”?

要想让Linux命令使用所有的CPU内核,我们需要用到GNU Parallel命令,它让我们所有的CPU内核在单机内做神奇的map-reduce操作,当然,这还要借助很少用到的–pipes 参数(也叫做–spreadstdin)。这样,你的负载就会平均分配到各CPU上,真的。

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

以前的做法:

cat bigfile.bin | bzip2 --best > compressedfile.bz2

现在这样:

cat bigfile.bin | parallel --pipe --recend '' -k bzip2 --best > compressedfile.bz2


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

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
…然后你可以使用管道把输出存储到指定的文件里。
分享到:
评论

相关推荐

    如何利用多核CPU来加速你的Linux命令(GNU Parallel)

    在现代计算机系统中,多核CPU已经成为标准配置,然而,并非所有Linux命令都能充分利用这些核心的优势。GNU Parallel是一个强大的工具,它可以将单线程的Linux命令转换为并行任务,从而充分利用多核CPU,显著提高处理...

    Linux命令大全完整版.pdf

    - 文本处理工具:如grep(搜索文本内容)、sed(流式文本编辑器)、awk(文本分析工具)等,用于文本内容的搜索、替换和数据提取。 - 文本编辑器:如vi(Vim)、ed(基本编辑器)、nano等,是Linux系统中用于文本...

    Linux命令大全 Linux命令大全

    以上只是Linux命令大全中的一部分,实际中还有许多其他命令,如文本处理命令(`sed`、`awk`)、系统维护(`logrotate`、`cron`)、软件源码编译(`make`、`gcc`)等。熟练掌握这些命令能极大提高你在Linux环境中的...

    Linux命令大全搜索工具

    `grep`用于在文件中搜索特定模式,`sed`进行流编辑,`awk`则用于处理结构化数据,`tr`进行字符转换。这些命令在日志分析、数据提取等方面非常有用。 3. **文件和权限管理** `chmod`改变文件或目录的权限,`chown`...

    Linux命令宝典大全

    2. **文本处理**:`cat`(查看文件内容)、`more`和`less`(分页查看)、`grep`(搜索匹配内容)、`sed`(流编辑器)以及`awk`(文本处理工具)等。 3. **文件权限和所有权**:`chmod`(修改文件权限)、`chown`...

    Linux命令速查手册(完整易懂)

    手册中包括了“Linux必学的80个命令”,“linux命令.EXE”(可能是一个Windows下的Linux命令解释程序),以及两个版本的PDF手册——“linux命令大全专业版”和“Linux命令速查手册”。 以下是基于这些资源的一些...

    LINUX命令大全用到的所有命令

    在Linux操作系统中,命令行是用户与系统交互的主要方式,对于初学者和专业人士来说,掌握常用的Linux命令至关重要。"LINUX命令大全"提供了一个全面的参考,帮助用户解决在使用Linux过程中遇到的各种问题。这份资源...

    linux常用命令大全.pdf

    支持多种压缩算法,如gzip、bzip2等。 - **zip/unzip**: 用于处理ZIP格式的压缩文件。这些命令易于使用且广泛支持。 #### 五、其他常用命令 - **echo**: 将文本输出到标准输出。 - **ln**: 创建硬链接或符号链接。...

    linux 命令手册.zip

    接着,手册将深入讲解文件管理,包括`find`命令用于查找文件,`grep`用于搜索文本内容,`sed`用于流编辑,以及`awk`用于处理和分析数据。这些工具能帮助用户高效地处理大量文件和数据。 在文件传输方面,`scp`和`...

    Linux命令大全搜索工具 v1.5.1.pdf

    5. **文本处理工具**:如**awk**, **grep**, **sed**等,它们是Linux中用于文本和数据处理的强大工具,能够对文件内容进行搜索、替换、排序等多种操作。 6. **系统工具**:如**atop**, **crontab**, **df**, **du**...

    Linux命令手册简明版

    3. **文本处理**:`grep`用于在文件中搜索特定字符串,`sed`进行流编辑,`awk`则是一个强大的文本分析工具。`tr`用于字符转换,`cut`用于截取字段。 4. **流程控制**:`if`、`else`、`for`、`while`等用于编写shell...

    Linux命令一页纸 可打印 速查 原创

    6. 解压缩命令:`tar zxvf xxx.tar.gz`、`tar jxvf xxx.tar.bz2`、`gzip -d xxx.tar.gz`、`bzip2 -d xxx.tar.bz2`、`gunzip`(等同于`gzip -d`)、`bunzip2`(等同于`bzip2 -d`)。 7. `zip`和`unzip`:用于ZIP压缩...

    linux命令全集.pdf

    Linux命令全集是Linux系统操作的核心工具,它们允许用户与操作系统进行交互,执行各种任务,如文件管理、系统管理、进程控制等。本文件详细介绍了316个Linux命令,涵盖了从基本到高级的各种功能。 文件管理是Linux...

    Linux命令大全API

    2. **文本处理**:`cat`、`more`、`less`用于查看文件内容,`grep`用于搜索特定模式,`sed`和`awk`则用于进行文本流编辑和处理。 3. **权限和所有权**:`chmod`改变文件或目录的权限,`chown`和`chgrp`更改所有者和...

    Linux命令大全(修改版).zip

    2. **文本处理**:例如`cat`显示文件内容,`more`或`less`分页查看文件,`grep`搜索特定模式,`sed`进行文本流编辑,`awk`处理结构化数据。 3. **系统信息与控制**:`whoami`显示当前用户,`date`显示日期和时间,`...

    超级常用linux操作命令

    Linux操作系统是许多IT专业人士...除此之外,还有许多其他命令,如`find`用于查找文件,`sed`和`awk`进行文本处理,`crontab`设置定时任务,以及`man`查阅命令手册等。通过不断学习和实践,你可以更加精通Linux系统。

    Linux命令

    4. **Linux实用命令**:除了基础命令,还有一些高级命令,如`sed`进行流编辑,`awk`处理文本数据,`cron`设置定时任务,`ssh`进行远程登录,`netstat`查看网络状态,`top`或`htop`监控系统资源等。熟练掌握这些命令...

    超方便的linux命令手册

    文档中的 `tar` 和压缩命令如 `gzip` (`gz`), `bzip2` (`bz2`), `xz` 等命令可以用于打包和压缩文件。为了比较和合并文件,可以使用 `diff`, `patch`, `merge` 等命令。编译和安装软件时,`./configure`, `make`, `...

Global site tag (gtag.js) - Google Analytics