免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 5230 | 回复: 14
打印 上一主题 下一主题

請教如何查找文件中某關鍵字所在行,及其以上三行? 在線等。。 [已解決] [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-04-22 10:56 |只看该作者 |倒序浏览
小弟剛接觸Solaris不久, 現根據需要想寫一個自動檢查Oracle alert log,查找有發生錯誤的信息,并發告警mail的腳本。
有在網上找到一位前輩的一個腳本如下,但由于其所輸出的error未包含有日期信息,查看起來不便。
現在希望能連error信息所在行及其以上三行全部輸出,請問要如何做?

小弟所使用的腳本如下:
oracle@fwdev $ cat ckalertlog.sh
####################################################################
## ckalertlog.sh ##
####################################################################
#!/bin/ksh
.. /test/oracle/oracle.profile
for SID in `cat $ORACLE_HOME/SIDLIST`
do
cd $ORACLE_BASE/admin/$SID/bdump
if [ -f alert_${SID}.log ]
then
mv alert_${SID}.log alert_work.log
touch alert_${SID}.log
cat alert_work.log >> alert_${SID}.hist
grep ORA- alert_work.log > alert.err
fi
if [ `cat alert.err|wc -l` -gt 0 ]
then
mailx -s "Oracle Alert Errors on ${SID} " mymail address < alert.err
fi
rm -f alert.err
rm -f alert_work.log
done
oracle@fwdev $


oracle alert log 如下所示。

Fri Apr  3 23:55:36 2009
ARC1: Evaluating archive   log 1 thread 1 sequence 4798
ARC1: Unable to archive log 1 thread 1 sequence 4798
      Log actively being archived by another process
Fri Apr  3 23:55:39 2009
ARCH: Completed archiving  log 1 thread 1 sequence 4798
Sat Apr  4 00:02:21 2009
Errors in file /oracle/admin/fwprod/bdump/fwprod_ckpt_1556.trc:
ORA-00600: internal error code, arguments: [ksmals], [tabBis:qesmmaComputeBounds], [], [], [], [], [], []
Sat Apr  4 00:02:59 2009
Control autobackup written to SBT_TAPE device
        comment 'API Version 2.0,MMS Version 5.0.0.0',
        media '720003'
        handle 'c-1564407803-20090404-00'
Sat Apr  4 00:03:28 2009
Errors in file /oracle/admin/fwprod/bdump/fwprod_ckpt_1556.trc:
ORA-00600: internal error code, arguments: [ksmals], [tabBis:qesmmaComputeBounds], [], [], [], [], [], []
Sat Apr  4 00:03:54 2009
Starting control autobackup
Sat Apr  4 00:04:35 2009
Errors in file /oracle/admin/fwprod/bdump/fwprod_ckpt_1556.trc:
ORA-00600: internal error code, arguments: [ksmals], [tabBis:qesmmaComputeBounds], [], [], [], [], [], []

請各位不吝賜教,小弟在線等。。。

[ 本帖最后由 suny628 于 2009-4-22 11:53 编辑 ]

论坛徽章:
5
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015年亚洲杯之朝鲜
日期:2015-03-13 22:47:33IT运维版块每日发帖之星
日期:2016-01-09 06:20:00IT运维版块每周发帖之星
日期:2016-03-07 16:27:44
2 [报告]
发表于 2009-04-22 11:14 |只看该作者

回复 #1 suny628 的帖子

grep -B 3 'urkey' urfile

论坛徽章:
0
3 [报告]
发表于 2009-04-22 11:16 |只看该作者
grep -B 3 "error" logfile

论坛徽章:
0
4 [报告]
发表于 2009-04-22 11:20 |只看该作者
原帖由 ywlscpl 于 2009-4-22 11:16 发表
grep -B 3 "error" logfile


謝謝你的回復,
可是為何報報錯:
oracle@fwdev$  grep -B 3 "ORA-" alert_fwprod.log
grep: illegal option -- B
Usage: grep -hblcnsviw pattern file . . .

我的系統是solaris 8

论坛徽章:
0
5 [报告]
发表于 2009-04-22 11:25 |只看该作者
原帖由 suny628 于 2009-4-22 11:20 发表


謝謝你的回復,
可是為何報報錯:
oracle@fwdev$  grep -B 3 "ORA-" alert_fwprod.log
grep: illegal option -- B
Usage: grep -hblcnsviw pattern file . . .

我的系統是solaris 8


改為grep -b 3 "ORA-" alert_fwprod.log  后可以,
可是好象沒有顯示 含有"ORA-"信息的這一行,要怎么改?
謝謝!

论坛徽章:
0
6 [报告]
发表于 2009-04-22 11:34 |只看该作者

回复 #4 suny628 的帖子

你的grep没-B这个参数,试试这个
awk '{a[NR]=$0}END{for (j=1;j<=NR;j++) if (a[j]~/error/) print a[j-3]"\n"a[j-2]"\n"a[j-1]"\n"a[j]}' logfile

论坛徽章:
0
7 [报告]
发表于 2009-04-22 11:46 |只看该作者
原帖由 ywlscpl 于 2009-4-22 11:34 发表
你的grep没-B这个参数,试试这个
awk '{a[NR]=$0}END{for (j=1;j


謝謝 ywlscpl ,這樣子可以耶!
這種方法比我原來想要的更完美多了,非常謝謝!

ps  剛剛才看到skyoflzp 昨天的一個帖子“攻克一個難題” 與我的這個問題非常相似, 好象也是老大您幫忙解決的!

謝謝了!

论坛徽章:
23
15-16赛季CBA联赛之吉林
日期:2017-12-21 16:39:27白羊座
日期:2014-10-27 11:14:37申猴
日期:2014-10-23 08:36:23金牛座
日期:2014-09-30 08:26:49午马
日期:2014-09-29 09:40:16射手座
日期:2014-11-25 08:56:112015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:49:0315-16赛季CBA联赛之山东
日期:2017-12-21 16:39:1915-16赛季CBA联赛之广东
日期:2016-01-19 13:33:372015亚冠之山东鲁能
日期:2015-10-13 09:39:062015亚冠之西悉尼流浪者
日期:2015-09-21 08:27:57
8 [报告]
发表于 2009-04-22 12:35 |只看该作者

回复 #6 ywlscpl 的帖子

这种方法虽然思路看起来简单,但缺要耗费很大的内存,在文件很大的时候就用不了了。
用取余的方法来改进下:

  1. awk '{a[NR%4]=$0}/error/{for(i=3;i>=0;i--) if(NR-i>0) print a[(NR-i)%4]}' urfile
复制代码

论坛徽章:
0
9 [报告]
发表于 2009-04-22 12:47 |只看该作者

回复 #8 ly5066113 的帖子

这个思路真好,只使用了4个数组元素,极大的节省了内存使用

论坛徽章:
5
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015年亚洲杯之朝鲜
日期:2015-03-13 22:47:33IT运维版块每日发帖之星
日期:2016-01-09 06:20:00IT运维版块每周发帖之星
日期:2016-03-07 16:27:44
10 [报告]
发表于 2009-04-22 13:05 |只看该作者

回复 #8 ly5066113 的帖子

向Tim学习,数学之美。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP