首页 > 系统相关 >用CPU来加速你的Linux命令

用CPU来加速你的Linux命令

时间:2023-05-07 14:05:59浏览次数:77  
标签:bigfile -- CPU 加速 cat awk Linux txt parallel

我们都知道 grep, bzip2, wc, awk, sed等等,都是单线程的,只能使用一个CPU内核。那么如何才能使用这些内核?

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

用CPU来加速你的Linux命令_sed

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

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

标签:bigfile,--,CPU,加速,cat,awk,Linux,txt,parallel
From: https://blog.51cto.com/706054oyu/6251895

相关文章

  • 在 AlmaLinux 9安装Docker Compose
    首先先安装Docker如何在AlmaLinux8上安装和使用Docker检查Docker版本docker--version安装DockerComposesudocurl-L"https://github.com/docker/compose/releases/download/v2.17.2/docker-compose-$(uname-s)-$(uname-m)"-o/usr/local/bin/docker-compose设置......
  • Linux deplay 安装 Ubuntu 及 MySQL
    设备支持:已root的mi-4(架构:armv71)软件支持:LinuxDeplay在Linuxdeplay上安装好你希望安装的Linux版本,我这里安装的是Ubuntu18.04(bionic),注意要根据手机的处理器型号选择适配的处理器版本,由于mi-4的处理器是armv71,发行版本选择armhfARMCortex-A系列(A53、A57、......
  • Book-Linux 系统编程-41章 共享库基础
    Book-Linux系统编程-41章共享库基础共享库是一种将库函数打包成一个单元使之能够在运行时被多个进程共享的技术。这种技术能够节省磁盘空间和RAM。41.1目标库构建程序的一种方式是简单地将每一个源文件编译成目标文件,然后将这些目标文件链接在一起组成一个可执行程序,如下所......
  • linux 中使用alias命令创建环境变量
     001、创建前[root@PC1hiblup]#lshibluphiblup_1.3.1_linux_x86_64_20230220.tar.gzhiblup.log[root@PC1hiblup]#hiblup##测试hiblup命令bash:hiblup:commandnotfound... 002、使用alias命令创建环境变量[root@PC1hiblup]#lshibluphiblup_1......
  • Linux驱动开发笔记(一):helloworld驱动源码编写、makefile编写以及驱动编译基本流程
    前言  基于linux的驱动开发学习笔记,本篇是描述了一个字符驱动的基础开发流程,以便做嵌入式开发多年的应用或者系统学习驱动开发。 笔者自身情况  笔者拥有硬件基础,单片机软硬基础,linux系统基础等各种,就是没有linux驱动框架基础,未做过linux系统移植和驱动移植开发了......
  • 快速上手Linux核心命令(十一):Linux用户相关命令
    目录前言useradd创建用户usermod修改用户信息userdel删除用户groupadd创建新的用户组groupdel删除用户组passwd修改用户密码chage修改用户密码有效期批量更新用户密码su切换用户visudo编辑sudoers文件sudo以另一个用户身份执行命令id显示用户与用户组信息w显示已登录......
  • Linux系列---【如何根据端口号确定应用是否已启动?并根据端口号定位到程序所在的目录?】
    如何根据端口号确定应用是否已启动?并根据端口号定位到程序所在的目录?方法一(lsof命令)#注意:没有该命令先执行安装命令yuminstalllsof#查看端口是否被占用lsof-i:7080如图,输完没有反应,说明端口未被占用,即应用未启动如图,输完如果有反应,寿命端口已占用,使用pwdx+pid命令即可......
  • 1 - Hand on system programming with Linux - 虚拟内存
    虚拟内存我的博客虚拟内存现代操作系统基于称作虚拟内存的内存模型。这些操作系统包括Linux、UNIX、MSWindows以及macOS。要想真正理解现代操作系统,必须深入理解虚拟内存以及内存管理。没有虚拟内存会有什么问题现在,让我们考虑一个只具有64MBRAM物理内存的情况。在老......
  • Linux各目录作用
    打开Ubuntu20.04系统,根目录如下:1、binbin为binary的简写,主要放置系统的必备执行文件,各种命令的实现在这个目录中。2、sbin主要放置系统管理的必备程序,root用户的命令在这个目录中。3、devdev为device的缩写,储存硬件设备信息。4、lib和lib64lib为library的缩写,lib存放着......
  • Linux 系统用户登录时很慢怎么办
    第一步:编辑 /etc/ssh/sshd_config文件vim/etc/ssh/sshd_config 第二步:搜索DNS 第三步: 将UseDNS前面的#注释删掉,同时将UseDNS后面的yes改为no,保存后退出 第四步:重启服务或服务器生效 ......