逐行处理文本问题

sh/bash/dash/ksh/zsh等Shell脚本
回复
zhangxiaofir
帖子: 53
注册时间: 2010-12-09 23:54

逐行处理文本问题

#1

帖子 zhangxiaofir » 2012-10-09 13:48

log格式如下

代码: 全选

201201 ***  A ****  name=hahha date=2012  ***** 
201201 **** 1564 ***** 
201201   A **** deat=1564 ***** 
log里面全是以上格式的行 其中***代表各种乱码 每行的列数不同 需要把每行中具有A特定的关键词的行 中的name date 字段后的字符串提取出来 用shell 或者python 该怎么写哈?
头像
yanyeyy
帖子: 26
注册时间: 2008-10-06 23:04

Re: 逐行处理文本问题

#2

帖子 yanyeyy » 2012-10-09 16:03

代码: 全选

egrep -o -e "name=\w+\b" -e "date=\w+\b" 
zhangxiaofir
帖子: 53
注册时间: 2010-12-09 23:54

Re: 逐行处理文本问题

#3

帖子 zhangxiaofir » 2012-10-09 16:10

yanyeyy 写了:

代码: 全选

egrep -o -e "name=\w+\b" -e "date=\w+\b" 
在shell里面怎么做判断 比如 那行有了个A 然后才对该行进行处理
zhangxiaofir
帖子: 53
注册时间: 2010-12-09 23:54

Re: 逐行处理文本问题

#4

帖子 zhangxiaofir » 2012-10-09 16:13

zhangxiaofir 写了:
yanyeyy 写了:

代码: 全选

egrep -o -e "name=\w+\b" -e "date=\w+\b" 
在shell里面怎么做判断 比如 那行有了个A 然后才对该行进行处理
还有刚才试了下 结果是一列 能否让单行处理结果出现在一行里 ?
头像
yanyeyy
帖子: 26
注册时间: 2008-10-06 23:04

Re: 逐行处理文本问题

#5

帖子 yanyeyy » 2012-10-09 17:03

zhangxiaofir 写了:
zhangxiaofir 写了:
yanyeyy 写了:

代码: 全选

egrep -o -e "name=\w+\b" -e "date=\w+\b" 
在shell里面怎么做判断 比如 那行有了个A 然后才对该行进行处理
还有刚才试了下 结果是一列 能否让单行处理结果出现在一行里 ?

代码: 全选

egrep -o -e "name=\w+\b" -e "date=\w+\b -n
可以显示行号,但内容不在一行显示,可以导入另一个文件里再修改
在shell里面怎么做判断 比如 那行有了个A 然后才对该行进行处理???
看不懂什么意思

在一行输出,用python写的.你的问题说的不太清楚,以下做可参考,自己改改吧 :em06

代码: 全选

import re
logfile='/tmp/log' #这是要提取内容的log文件
re_name=re.compile(r'name=\w+\b')
re_date=re.compile(r'date=\w+\b')
for line in open(logfile,'r'):
    name=re_name.findall(line)
    date=re_date.findall(line)
    if len(name)!=0:
        print ' '.join(name),
    if len(date)!=0:
        print ' '.join(date)
zhangxiaofir
帖子: 53
注册时间: 2010-12-09 23:54

Re: 逐行处理文本问题

#6

帖子 zhangxiaofir » 2012-10-10 13:35

yanyeyy 写了:
zhangxiaofir 写了:
zhangxiaofir 写了:
yanyeyy 写了:

代码: 全选

egrep -o -e "name=\w+\b" -e "date=\w+\b" 
在shell里面怎么做判断 比如 那行有了个A 然后才对该行进行处理
还有刚才试了下 结果是一列 能否让单行处理结果出现在一行里 ?

代码: 全选

egrep -o -e "name=\w+\b" -e "date=\w+\b -n
可以显示行号,但内容不在一行显示,可以导入另一个文件里再修改
在shell里面怎么做判断 比如 那行有了个A 然后才对该行进行处理???
看不懂什么意思

在一行输出,用python写的.你的问题说的不太清楚,以下做可参考,自己改改吧 :em06

代码: 全选

import re
logfile='/tmp/log' #这是要提取内容的log文件
re_name=re.compile(r'name=\w+\b')
re_date=re.compile(r'date=\w+\b')
for line in open(logfile,'r'):
    name=re_name.findall(line)
    date=re_date.findall(line)
    if len(name)!=0:
        print ' '.join(name),
    if len(date)!=0:
        print ' '.join(date)
谢谢哈 我大致想要的就是这个
回复