暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

shell文本读取效率对比

爱可可的人生记录仪 2020-05-12
1147
之前一篇文章朋友提到了一个不错的点,如果文件很大,该怎么处理?当然,对于海量的数据处理,已经超出了我的能力范围,就不卖弄了。我就简单的做个小测验,看一下linux下对于一般大文件的文本读取效率如何。我准备的实验文件为access.log,大小为9.8G。对于一般的业务来讲,我觉得比较有代表性了。
    ls -lh access.log 
    -rw-rw-r-- 1 keke keke 9.8G May 12 08:47 access.log
    复制

    为了实验的准确性,我选择了同一台主机,环境完全一致,每一个测试开始之前我也都清空了文件缓存(缓存影响非常大)。

      sync
      echo 3 > /proc/sys/vm/drop_caches
      复制
        time sed -n '1,$p' access.log >/dev/null
        real  1m27.401s
        user 0m10.555s
        sys  0m12.987s
        time sed -n '100000p' access.log
        real 1m27.377s
        user 0m5.478s
        sys  0m11.267s
        复制
          time awk '{print $0}' access.log >/dev/null
          real 1m28.749s
          user 0m11.827s
          sys  0m10.616
          time awk 'NR==100000{print $0}' access.log
          real 1m27.506s
          user 0m11.386s
          sys  0m10.578s
          复制
            time while read line;do echo $line >/dev/null;done < access.log 
            real 45m6.354s
            user 39m43.833s
            sys  5m21.525
            复制
              time cat access.log >/dev/null
              real 1m27.954s
              user 0m0.036s
              sys  0m9.583s
              time cat access.log |grep "10.120.0.81 | 30/Aug/2019:15:21:08 +0800"
              real 1m27.926s
              user 0m4.305s
              sys  0m13.246s
              复制
                time head -32818237  access.log >/dev/null
                real 1m27.371s
                user 0m9.494s
                sys  0m10.744s
                time head -100000 access.log |tail -1
                real 0m0.246s
                user 0m0.027s
                sys 0m0.096s
                复制
                  time tail -32818237  access.log >/dev/null
                  real 21m54.679s
                  user 0m3.554s
                  sys  1m5.696s
                  复制

                  可以看到,linux常用的几个文本命令效率都差不多,对于简单的显示指定行,用head+tail的方式效率很高。当然,sed和awk有着强大的特殊功能,这些命令都是行处理的,不用担心把内存用尽。

                  文章转载自爱可可的人生记录仪,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

                  评论