设为首页 收藏本站
查看: 1168|回复: 1

[经验分享] 测试python awk sed 读取文件指定位置时的性能

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2015-6-1 08:50:59 | 显示全部楼层 |阅读模式
#!/bin/env python
#coding:utf8


'''
awk 打印指定行数
sed 打印指定行数
python 打印指定位置,某长度字符串

awk 耗时最长,很长
sed awk 时间一半
python 耗时 基本忽略不计


使用脚本监控日志文件的时候,每次记录上次退出的位置
python效率最高.
'''
import os
from  time import time
from os.path import getsize

testfile='/dev/shm/%s' % time()

#生成文件总行数 10**8 大约800M  10**7 大约 80M
linesize=10**7
#提取文件中间行
halfline=int(linesize / 2)
#文件大小一半
halffilesize=0
#测试次数
num=10
#生成文件大小
filesize=0
r=[]

def create_testfile():
        f=open(testfile,'w')
        for i in xrange(linesize):
                f.write(str(i)+'\n')
        f.close()

def time1(func):
        t1=time()
        func()
        t2=time()
        t=t2-t1
        print func.func_name,t
        r.append("%s:\t\t%s" % (func.func_name,str(t) ) )

def awk():
        for i in range(num):
                os.system("/bin/awk 'NR==%s { print $0 }' %s " % (halfline,testfile) )

def sed():
        for i in range(num):
                os.system("/bin/sed -n %sp %s " % (halfline,testfile) )               
                #os.system("/bin/sed -n %sp %s|awk '{print $0}' " % (halfline,testfile) )               
               
def py():
        for i in range(num):
                fn=open(testfile)
                #读取
                fn.seek(halffilesize)
                print fn.read(7)
                fn.close()
               

               
print "create test file!"
create_testfile()       

filesize=getsize(testfile)
halffilesize=int(filesize/2)


time1(awk)
time1(sed)
time1(py)
print "\n\n"
print "halffilesize:\t\t",halffilesize
print "filesize:\t\t",filesize
os.system('/bin/ls -lh %s' % testfile)
print "\t"
for i in r:
        print i
os.unlink(testfile)


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-72630-1-1.html 上篇帖子: 使用Python下载妹子图网站图片 下篇帖子: Python 中有关中文编码解码先关 python
累计签到:102 天
连续签到:1 天
发表于 2015-6-26 13:25:12 | 显示全部楼层
不错,学习了!

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表