提取文件指定子串python+awk

例子提取文件中的特定子串

123142134sadfsadlzsfdsafszdfdsq431535e4qt/version='1.0'/dfasfdsfsdgsasdgdsafe3qreghqa
12314sfdsafszdfdsq431535e4qt/version='1.21'/dfasfdsfsdgsfe3qreghqa
123142134sadfsadlzdfdsq431535e4qt/version='1.334'/dfasfsdgdsafe3qreghqa
123142134sadfdsafszdfdsq431535e4qt/version='1.423'/dfasfdsfasdgdsafe3qreghqa
123142134sadfsafdsq431535e4qt/version='1.5'/dfasfdsfsdgssafe3qreghqa
123142134sadfsdsafszdfdsq431535e4qt/version='1.6'/dfasfdsfsafe3qreghqa

提取version字段数据。

  • 方案一:读每一行,split分隔,find目标字符串,截取子串。
def getVersion(filename):
    versionList = []
    with open(filename,'r') as lines:
        for line in lines:
            tmpList = line.split('/')
            idx=tmpList[1].find('=')
            versionList.append(tmpList[1][idx+1:])
    return versionList
  • 方案二:利用正则的前向后向配置提取目标子串。
def getVersion2(filename):
    versionList=[]
    with open(filename,"r") as fp:
        lines = fp.read()
        pattern = re.compile(r"(?<=/version=).+?(?=/)")
        versionList.append(re.findall(pattern,lines))
    return versionList
  • 利用awk同样可以完成。
awk -F/ '{print $2}' filename | cut -c9- 

PS:这里awk -F指定分隔符为/ 。cut -c取指定范围的子串, 9-表示9到结束

总结一下python的基础语法

  • 文件操作
    with open() as lines #with语法可以优雅的打开文件,确保文件的关闭,以及捕获异常
    for line in lines #读取每行数据。利用文本迭代器
    readlines()#将读取文件所有行,返回包含每一行数据的list。
    readline()#读取一行。
    read()#将文件内容一次性读入内存。
  • 字符串操作
    str.find(str)#返回str首字符在查找字符串中的位置,没有找到返回-1
    str.split(‘/’)#根据指定分隔符分隔字符,返回list
  • 正则操作
    (?<=/version=)表示以/version=开始
    (?=/)表示以/结尾
    .+?表示最短匹配字符串。 .表示任意字符,+表示一次或多次匹配,?表示非贪婪匹配
发布了119 篇原创文章 · 获赞 27 · 访问量 31万+
展开阅读全文

请问awkpython中如何显示当天产生的日志?

02-12

#coding=utf-8 import os import json import httplib import codecs LogFile='/etc/httpd/logs/access_log' #日志 logMess='/tmp/acc.log' if os.path.isfile(logMess): os.system('cp /dev/null %s'% logMess) file=codecs.open(logMess,'w+',encoding='utf-8') def cmd(cmd): return os.popen(cmd).readlines() ''' def getIp(ip): return json.loads(os.popen("/usr/bin/curl http://ip.taobao.com/service/getIpInfo.php?ip=%s" % ip).readline())['data'] ''' conn = httplib.HTTPConnection('ip.taobao.com') def getIpCountry(ip): conn.request('GET','/service/getIpInfo.php?ip=%s' % ip) r1=conn.getresponse() if r1.status == 200: #return json.loads(r1.read())['data'] return json.loads(r1.read().decode())['data'] else: return "Error" #将access.log文件进行分析,并转为python数组 file.write(u"字段说明:ip 访问次数据 ip国家 城市的 isp号 省份 所在地区\n") ipDb=[] for i in cmd('''/usr/bin/awk '{print $1}' %s |sort |uniq -c''' % LogFile): ip = i.strip().split(' ') ipDb.append(ip) #通过taobao 提供接口分析ip地址来源 for i in ipDb: _tmpD=getIpCountry(i[1]) #格式说明:ip 访问次数据 ip国家 城市的 isp号 省份 所在地区 if _tmpD['city'] == unicode('唐山市', "utf-8"): print i out="%s%s%s%s%s%s%s"%(i[1].ljust(20),i[0].ljust(10),_tmpD['country'].ljust(20),_tmpD['city'].ljust(16),_tmpD['isp_id'].ljust(16),_tmpD['region'].ljust(16),_tmpD['area'].ljust(16)) print (out) file.write("%s\n"%out) conn.close() file.close() 我想显示当天的日志,怎么做? 问答

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览