• Efficiency in Shell


      最近在写一个shell脚本, 由于该脚本对效率有较高的要求, 所以查阅了一些文章. 感觉这篇文章写得确实不错, 文章中的例子,确实很棒! 所

    以我把他们提取出来:

    @1:实例:

    需求:计算1到100000累加结果

    方法1:采用bash  shell的数值计算

    # time for((i=0;i<=100000;i++)); do ((sum+=i)); done ; echo $sum

    real    0m1.134s

    user    0m1.080s

    sys     0m0.048s

    5000050000

    方法2:采用awk的数值计算

    # time awk 'BEGIN{while(i++<100000)sum+=i; printf "%d", sum;}' 

    5000050000

    real    0m0.029s

    user    0m0.020s

    sys     0m0.000s

    实例结果分析:同等的累加运算,采用shell的数值计算耗时1.134秒,采用awk工具只需要0.029秒。实验结果表明,适当的采用工具软件,

    能够明显提高shell脚本的执行效率。    

    @2:实例: 正则效率。

    需求:某文本以空格和/进行分隔,获取第五列的内容.        

    方法1:采用正则[ /]分别匹配二种分隔符,取得第五列

    # time awk -F'[ /]' '{print $5}' a.txt  >/dev/null

    real    0m17.717s

    user    0m14.749s

    sys     0m2.844s

    方法2:实际数据分析中发现,可以采用单字符解析的方式,首先根据“空格”分隔符取得第4列,再利用“/”分隔符取得第二列。

    # time awk '{print $4}' a.txt |awk -F/ '{print $2}' >/dev/null

    real    0m0.565s

    user    0m0.224s

    sys     0m0.688s

    实例结果分析:awk采用-F指定分隔符,在多分隔符情况下,会启用正则去解析记录,增加了函数调用,和字符串匹配的消耗,效率上理所

    当然的比不上默认的空格或单字符分隔符采用的简单的字符比较方式,尽管如此,方法2依赖于对需求的进一步分析,适用的需求范围没有

    使用正则那么简便灵活。

    @3:实例:sed应用,读取指定行

    方法1:sed -n '45,50p' filename

    方法2:sed -n '51q;45,50p' filename

    实例结果分析:方法2在方法1基础上增加了一个判断,当文件读取到第51行时即时退出。避免文件后续部分的遍历,在大数据量处理上能

    够很大的提高执行效率。

    @4:实例:sed应用,文本替换

    方法1:sed 's/foo/bar/g' filename

    方法2:sed '/foo/ s/foo/bar/g' filename

    实例结果分析:sed支持采用正则进行匹配和替换,考虑字符串替换的需求中,不防加上地址以提高速度。实例中通过增加一个判断逻辑,

    采用“事先匹配”代替“直接替换”,由于sed会保留前一次的正则匹配环境,不会产生冗余的正则匹配,因此方法2具有比方法1更高

    的效率

    @5:awk的特色数据结构:哈希数组,也称关联数组。哈希数组中的每个单元包括二个元素:单元键(key)及单元值(values)。哈希结构

    的效益体现在以较小的内存空间实现大的数据空间上的数据存放,节省了数据占存空间;同时哈希数组中的数据访问是随机访问,不需要

    遍历而直接通过哈希函数直接访问数组单元取值,节省了数据查询时间。

    Reference:

    shell脚本效率: http://blog.csdn.net/yanook/article/details/8395482

  • 相关阅读:
    tensorflow日志信息如何屏蔽?
    测试图像篡改模型fps逐渐降低的原因?
    np.float32()和np.float64
    hive on spark运行时 ,读取不到hive元数据问题
    Hadoop之HDFS(二)HDFS工作机制和集群安全模式
    Spark中的Driver和Executor详解及相关调优
    Linux查看物理CPU个数、核数、逻辑CPU个数
    shell命令查看进程id,并杀死进程,停止脚本
    Flink CDC 2.0 正式发布,详解核心改进
    Kafka 如何保证消息的消费顺序一致性
  • 原文地址:https://www.cnblogs.com/lxw0109/p/efficiency-in-shell.html
Copyright © 2020-2023  润新知