免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: yangfbi008
打印 上一主题 下一主题

shell的grep使用问题 [复制链接]

论坛徽章:
0
11 [报告]
发表于 2009-05-19 16:23 |只看该作者
哦,就是统计出现了哪些ERROR类型是吧?
给一段log的例子吧,保持格式即可,内容该屏蔽的可以屏蔽掉。

论坛徽章:
0
12 [报告]
发表于 2009-05-19 16:28 |只看该作者
我觉得可以将grep出来的ERROR传给awk,用数组来处理

论坛徽章:
0
13 [报告]
发表于 2009-05-19 16:52 |只看该作者

回复 #11 kwokcn 的帖子

1 ERROR 1064 (42000) at line 1: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'update  
2 SEQUENCE_FOR_ACCESS_LOG_FILE_MGT
3 set SEQUENCE_ID_FOR_SEQUENCE_NUMBER = ' at line 25
4 ERROR 1064 (42000) at line 1: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'update  
5 SEQUENCE_FOR_ACCESS_LOG_FILE_MGT
6 set SEQUENCE_ID_FOR_SEQUENCE_NUMBER = ' at line 25
7 ERROR 1064 (42000) at line 1: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'update  
8 SEQUENCE_FOR_ACCESS_LOG_FILE_MGT
9 set SEQUENCE_ID_FOR_SEQUENCE_NUMBER = ' at line 25

这是log本来应该是一行 但是因为中间有SQL语句 给切换成3行了

我tail -1 的话就得不到ERROR的代码了

[ 本帖最后由 yangfbi008 于 2009-5-19 17:00 编辑 ]

论坛徽章:
0
14 [报告]
发表于 2009-05-19 17:03 |只看该作者
你需要的是ERROR 1064这种错误代码的统计吗?如果ERROR 1064出现过就不做处理,否则ERR_NUM自加1,是这样吗?

现在对你的需求还是不太清楚……

论坛徽章:
0
15 [报告]
发表于 2009-05-19 17:09 |只看该作者

是不是要实现取最后一次ERROR?

试试grep的-n选项:
tail -x | grep ERROR -n | tail -1

--------------------------------------------
ps:x的大小,自己把握

论坛徽章:
0
16 [报告]
发表于 2009-05-19 17:36 |只看该作者

回复 #14 kwokcn 的帖子

简单的说
在MYSQL语句执行完后,我想得到是否出现了ERROR。

./exec_sql.sh ${SQL_DEPLOY_PATH}/DELETE_ACCS_LOG_FILE_MGT_BY_SEQUENCE_NUMBER.SQL >> ${EXEC_LOG} 2>&1

      #在./exec_sql.sh 执行过程中是否出现ERROR的判断
     if [ -n  "`tail -1 ${EXEC_LOG} | grep ERROR`" ]; then

         let ERROR_NUM+=1
         continue
      fi

论坛徽章:
0
17 [报告]
发表于 2009-05-19 18:13 |只看该作者
呃~如果ERROR都是三行,并且没有错误时也输出log到log文件,那tail -n 3就能解决了。:)

如果本次统计中前面出现过的error code不再处理,ERROR判断部分可以这样:


  1. s=$(tail -n 3 URLOGFILE | grep -Eo "ERROR [0-9]+");
  2. if [[ ! -z $s && -z $(echo "$str" | grep "$s") ]]; then # Error_Code第一次出现
  3.     str=$str" "$s
  4.     ... # 你的处理
  5. fi
复制代码

论坛徽章:
0
18 [报告]
发表于 2009-05-19 18:16 |只看该作者
如果你只是想统计所有处理结束后一共有多少Error Code,循环执行你的SQL语句,结束后直接grep就行:

  1. grep -Eo "ERROR [0-9]+" URLOGFILE | sort -u
复制代码

论坛徽章:
0
19 [报告]
发表于 2009-05-20 09:08 |只看该作者

回复 #18 kwokcn 的帖子

呵呵 非常感谢昨天的回答

不过有两点
1.无法确定ERROR肯定是3行,这会根据出错SQL文的不同而不同
2.我不是想统计什么,也不想确认是否以前出现过现在这个ERROR

我想判断前一句MYSQL执行后是否出现了ERROR(以前怎么样完全忽略)

论坛徽章:
0
20 [报告]
发表于 2009-05-20 11:15 |只看该作者
正常处理的log语句格式是什么样的呢?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP