Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2079371
  • 博文数量: 470
  • 博客积分: 10206
  • 博客等级: 上将
  • 技术积分: 5620
  • 用 户 组: 普通用户
  • 注册时间: 2008-07-03 12:50
文章分类

全部博文(470)

文章存档

2012年(1)

2011年(18)

2010年(47)

2009年(404)

分类:

2009-04-21 22:02:37

如下一个日志,如何从每个时间段中查到有mounted的字符,则该时间段的全部行打印出来。
比如:第三个时间段中有一行有mounted字符,则把第三个时间段所有行全部打印出来
Sun Jan  2 07:42:56 2000
Database mounted in Exclusive Mode
Completed: ALTER DATABASE   MOUNT


日志:
Sun Jan  2 07:42:56 2000
Setting recovery target incarnation to 1
Sun Jan  2 07:42:56 2000
Successful mount of redo thread 1, with mount id 4265748284
Sun Jan  2 07:42:56 2000
Database mounted in Exclusive Mode
Completed: ALTER DATABASE   MOUNT
Sun Jan  2 07:42:56 2000
ALTER DATABASE OPEN
Sun Jan  2 07:42:57 2000
Thread 1 opened at log sequence 5
  Current log# 2 seq# 5 mem# 0: /mesdata/redo/redo02.log
Successful open of redo thread 1

可不可以用一个awk解决这个问题?万分感谢~



您对本贴的看法:
| |
  帅哥 (暗夜星空)
法王
休息休息



CU编号: 306408
注册:2005-8-25
最后登录: 2009-04-21
帖子:
精华:0







来自:广州<-->杭州
状态:...离线...

[] [] [博客]


[]     顶部
发表于 2009-4-21 17:19 
这个第三个字段是什么意思?~?



您对本贴的看法:

__________________________________

有时候回答问题是信口开河......
因此不保证所有回复问题的答案的准确性.
如果正好是对的,那是碰到了死耗子..呵呵.
想着休息,不想做事!
| |
  帅哥
精灵王




CU编号: 690903
注册:2008-4-13
最后登录: 2009-04-21
帖子:
精华:0







状态:...在线...

[] [] [博客]


[]       顶部
发表于 2009-4-21 17:19 
回复 #1 skyoflzp 的帖子

grep -C1 'mounted' urfile



您对本贴的看法:
| |
  帅哥 (肠子)
大天使



CU编号: 631385
注册:2007-10-21
最后登录: 2009-04-21
帖子:
精华:0







状态:...保密...

[] [] [博客]


[]     顶部
发表于 2009-4-21 17:24 


QUOTE:
第三个时间段所有行

这个是指几行?还是出现下一个时间即可

[ 本帖最后由 changzi100 于 2009-4-21 17:25 编辑 ]



您对本贴的看法:

__________________________________

给个工作吧!
| |

天使



CU编号: 347943
注册:2005-12-11
最后登录: 2009-04-21
帖子:
精华:0







状态:...在线...

[] [] [博客]


[]     顶部
发表于 2009-4-21 17:25 
[root@Mylinux tmp]# awk '$4~/[0-9][0-9]:[0-9][0-9]:[0-9][0-9]/{n++;a[n]=$0;next}{a[n]=a[n]"\n"$0}END{for (j=1;j<=n;j++) if (a[j]~/mounted/) print a[j]}' file
Sun Jan  2 07:42:56 2000
Database mounted in Exclusive Mode
Completed: ALTER DATABASE   MOUNT

[ 本帖最后由 ywlscpl 于 2009-4-21 17:30 编辑 ]



您对本贴的看法:

__________________________________

shell新手&&awk新手
我的awk学习笔记
http://blog.chinaunix.net/u3/91453/showart_1798635.html
| |
  帅哥 (租房子的小朋友)
精灵王



CU编号: 636072
注册:2007-11-1
最后登录: 2009-04-21
帖子:
精华:0







状态:...离线...

[] [] [博客]


[]     顶部
发表于 2009-4-21 17:33 
awk 'BEGIN { RS = "Sun" } { if( $0 ~ /mounted/) {print RS$0}}' urfile

# 沿用性不强 是用Sun开头来分割文件



您对本贴的看法:

__________________________________

-------------------------------------------------------------------
GNU bash, version 3.1.17(6)-release (i686-pc-cygwin)
| |
  帅哥 (Tim)
法师


CU奥运火炬传递手2008
CU编号: 465018
注册:2006-9-13
最后登录: 2009-04-21
帖子:
精华:0







来自:长春
状态:...离线...

[] [] [博客]


[]     顶部
发表于 2009-4-21 17:42 
回复 #1 skyoflzp 的帖子

如果只查一天的日志:

CODE:
awk 'BEGIN{RS="Sun Jan  2 ..:..:.. 2000\n"}/mounted/{print s""$0}{s=RT}' urfile

要查多天的,可以把RS改成更通用的正则表达式。



您对本贴的看法:

__________________________________

记住该记住的,忘记该忘记的。改变能改变的,接受不能改变的。
| |
  帅哥 (租房子的小朋友)
精灵王



CU编号: 636072
注册:2007-11-1
最后登录: 2009-04-21
帖子:
精华:0







状态:...离线...

[] [] [博客]


[]     顶部
发表于 2009-4-21 17:47 


QUOTE:
原帖由 ly5066113 于 2009-4-21 17:42 发表
如果只查一天的日志:

awk 'BEGIN{RS="Sun Jan  2 ..:..:.. 2000\n"}/mounted/{print s""$0}{s=RT}' urfile

要查多天的,可以把RS改成更通用的正则表达式。

顶Tim 质量明显上去了 呵呵



您对本贴的看法:

__________________________________

-------------------------------------------------------------------
GNU bash, version 3.1.17(6)-release (i686-pc-cygwin)
| |
  帅哥
大天使




荣誉会员  
CU编号: 51293
注册:2003-4-10
最后登录: 2009-04-21
帖子:
精华:







来自:西安
状态:...离线...

[] [] [博客]


[]     顶部
发表于 2009-4-21 17:54 
awk '$5~/200[0-9]|199[0-9]/{if (s~"mounted") print s;s=$0;next}{s=s "\n" $0}'



您对本贴的看法:
| |
  帅哥
精灵王




CU编号: 79854
注册:2003-8-5
最后登录: 2009-04-21
帖子:
精华:0







状态:...离线...

[] [] [博客]


[]     顶部
发表于 2009-4-21 18:00 
多谢ywlscpl,加10分。
另外,有没有可能在if (a[j]~/mounted/) 条件判断这里,不写特定字符,而是在外部定义一个exclude list,由此来过滤?
多谢了。



您对本贴的看法:
回复 #10 skyoflzp 的帖子

awk -v var="$list" ...

#分应该是tim的 lz 呵呵



您对本贴的看法:

__________________________________

-------------------------------------------------------------------
GNU bash, version 3.1.17(6)-release (i686-pc-cygwin)
| |
  帅哥 (黑哥)
精灵使



CU编号: 631768
注册:2007-10-22
最后登录: 2009-04-21
帖子:
精华:0







状态:...在线...

[] [] [博客]


[]     顶部
发表于 2009-4-21 18:21 
回复 #7 ly5066113 的帖子

学习RT。



您对本贴的看法:

__________________________________

LIVE FREE OR DIE!     K.I.S.S.


| |
  帅哥 (黑哥)
精灵使



CU编号: 631768
注册:2007-10-22
最后登录: 2009-04-21
帖子:
精华:0







状态:...在线...

[] [] [博客]


[]     顶部
发表于 2009-4-21 18:22 
回复 #9 woodie 的帖子

Good!



您对本贴的看法:

__________________________________

LIVE FREE OR DIE!     K.I.S.S.


| |
(狼烟)
精灵
披着狼皮的羊



CU编号: 547805
注册:2007-4-5
最后登录: 2009-04-21
帖子:
精华:0







状态:...离线...

[] [] [博客]


[]     顶部
发表于 2009-4-21 18:25 


QUOTE:
原帖由 ly5066113 于 2009-4-21 17:42 发表
如果只查一天的日志:

awk 'BEGIN{RS="Sun Jan  2 ..:..:.. 2000\n"}/mounted/{print s""$0}{s=RT}' urfile

要查多天的,可以把RS改成更通用的正则表达式。

RS+RT,学习~



您对本贴的看法:
| |
  帅哥
大天使




荣誉会员  
CU编号: 51293
注册:2003-4-10
最后登录: 2009-04-21
帖子:
精华:







来自:西安
状态:...离线...

[] [] [博客]


[]     顶部
发表于 2009-4-21 18:34 


QUOTE:
原帖由 luyi1983 于 2009-4-21 18:06 发表
awk -v var="$list" ...

#分应该是tim的 lz 呵呵

RT是gawk的扩展,楼主既然是分析oracle日志,很可能机器上没有gawk,所以应该尽量避免。ywlscpl 的代码虽然有可以改进的地方,不过只要能解决楼主的问题也很好。



您对本贴的看法:
| |

天使



CU编号: 347943
注册:2005-12-11
最后登录: 2009-04-21
帖子:
精华:0







状态:...在线...

[] [] [博客]


[]     顶部
发表于 2009-4-21 18:51 


QUOTE:
原帖由 skyoflzp 于 2009-4-21 18:00 发表
多谢ywlscpl,加10分。
另外,有没有可能在if (a[j]~/mounted/) 条件判断这里,不写特定字符,而是在外部定义一个exclude list,由此来过滤?
多谢了。

方法1:用awk自己的变量  
        awk -v var="mounted" '.....if (a[j]~var) ...'
方法2:用shell的变量,shell变量var="mounted"     
       awk '... if (a[j]~/'$var'/) ...'

[ 本帖最后由 ywlscpl 于 2009-4-21 18:54 编辑 ]



您对本贴的看法:

__________________________________

shell新手&&awk新手
我的awk学习笔记
http://blog.chinaunix.net/u3/91453/showart_1798635.html
阅读(460) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~