利用多核来加速Linux命令行
本文转载自 多核CPU来加速 awk, sed, bzip2, grep, wc等,如需查看原文,请点此链接进入。
-------------------------------我是分割线 开始 ---------------------------------------
要想让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
然后你可以使用管道把输出存储到指定的文件里。
-------------------------------我是分割线 结束 ---------------------------------------
利用多核来加速Linux命令行的更多相关文章
- wpa_supplicant 移植及 linux 命令行模式配置无线上网
本文涉及内容为linux 命令行模式配置无线上网 及 wpa_supplicant 移植到开发板的过程,仅供参考. 1.源码下载 wpa_supplicant 源码下载地址 :http://hosta ...
- Linux命令行环境与桌面环境护切换
1.前言 在大部分情况下,我们在使用Linux时习惯使用命令行环境,但是有时候也还是会使用到安装桌面环境,所以在这里介绍一下如何给没有安装桌面环境的系统安装桌面环境.以Centos 6.5 为例演示一 ...
- 核心系统命令实战 第一章Linux命令行简介
第一章Linux命令行简介 1.1 Linux命令行概述 1.1.1 Linux 命令行的开启和退出 开启:登陆账号密码进入系统 退出:exit/logout 快捷键:Ctrl+d 1.1.2 Li ...
- 40个超有趣的Linux命令行彩蛋和游戏
40个有趣的Linux命令行彩蛋和游戏,让你假装成日理万机的黑客高手.附一键安装脚本,在树莓派和ubuntu云主机上亲测成功,有些还可以在Windows的DOS命令行中运行. 本文配套B站视频:40个 ...
- 像黑客一样使用 Linux 命令行
前言 之前在博客园看到一篇介绍 IntelliJ IDEA 配置的文章,它里面用的是 gif 动态图片进行展示,我觉得很不错.所以在我今天以及以后的博文中,我也会尽量使用 gif 动图进行展示.制作 ...
- 详解Linux命令行下常用svn命令
1.Linux命令行下将文件checkout到本地目录 svn checkout path(path是服务器上的目录) 例如:svn checkout svn://192.168.1.1/pro/do ...
- linux 命令行 光标移动技巧
linux 命令行 光标移动技巧 看一个真正的专家操作命令行绝对是一种很好的体验-光标在单词之间来回穿梭,命令行不同的滚动.在这里强烈建立适应GUI节目的开发者尝试一下在提示符下面工作.但是事情也不是 ...
- 在linux命令行下执行php 程序
如何在linux命令行下,执行php程序. 例子 打印当前时间 php -r "echo time()" 随机输出一个数字 php -r "echo rand(1,20) ...
- git代理,windows命令行代理,linux命令行代理
下载不动设置代理:git config --global http.proxy http://127.0.0.1:1080git config --global https.proxy https:/ ...
随机推荐
- delphi 中DLL的建立
Dll的创建与调用 File ->New->Other->Dll Wizard DLL的创建 //可以将本代码复制粘贴到项目中 library Project1; uses S ...
- SlideLayout
https://github.com/rey5137/SlideLayout
- PhoneGap开发手机程序入门教程
用PhoneGap开发手机移动程序 1. 什么是PhoneGap PhoneGap是一个自由开放源码的开发工具和框架,允许利用HTML + JavaScript + CSS的强大功能在多个手机 ...
- android143 360 短信电话拦截
package com.itheima.mobileguard.services; import java.lang.reflect.Method; import android.app.Servic ...
- MySQL · 特性分析 · MDL 实现分析
http://mysql.taobao.org/monthly/2015/11/04/ 前言 在MySQL中,DDL是不属于事务范畴的,如果事务和DDL并行执行,操作相关联的表的话,会出现各种意想不到 ...
- http协议Authorization认证方式在Android开发中的使用
我们都知道,http协议是一种无状态协议,在Web开发中,由于Session和Cookie的使用,使得服务端可以知道客户端的连接状态,即用户只需要在浏览器上登录一次,只要浏览器没有关闭,后续所有的请求 ...
- Google翻译,3个步骤灭绝人类
今儿这事儿得从一个新闻说起:<谷歌又飙车了,刚发布了神经机器翻译系统,没见过的语言它也能翻译> 大家如果懒的看原文,可以直接看我这个简单白话列表: Google又出来嘚瑟了,发布了基于神经 ...
- ASP.NET MVC 4 如何避免数据库被自动创建或自动迁移
保哥说要想避免数据库被自动创建或自动迁移,可以在Global.asax文件里的Application_Start方法中加入: System.Data.Entity.Database.SetInitia ...
- ASP.NET MVC and jqGrid 学习笔记 2-如何从本地获得数据
上回说到jqgrid的基本配置,同时演示了显示数据的一种方法——datatype: "local".这种方法是从本地获取的,确切地说是在前端页面的javascript里写的硬编码. ...
- 代理和 block 传值的使用
// // ZYViewController.h // BlockTest // // Created by yejiong on 14/11/2. // Copyright © 2014年 zzz. ...