请教shell脚本筛选日志命令
时间:2011-03-20
来源:互联网
本人是shell菜鸟,碰到一个筛选日志的问题,脚本写不出来,请教论坛里的同行。
源文件是:
- <a class="name" name="suite_C-plane.CN4240-TD LTE CP Counters ENB EPS BEARER REL REQ RNL RLF 20M SISO" title="C-plane.CN4240-TD LTE CP Counters ENB EPS BEARER REL REQ RNL RLF 20M SISO">CN4240-TD LTE CP Counters ENB EPS BEARER REL REQ RNL RLF 20M SISO</a>
- <td class="msg">error: (10060, 'Operation timed out')</td>
- <a class="name" name="suite_C-plane.CN4240-TD LTE CP Counters Paging 20M SISO" title="C-plane.CN4240-TD LTE CP Counters Paging 20M SISO">CN4240-TD LTE CP Counters Paging 20M SISO</a>
- <td class="msg">IndexError: list index out of range</td>
- <a class="name" name="suite_C-plane.CN4240-TD LTE CP Counters S1 SETUP 20M SISO" title="C-plane.CN4240-TD LTE CP Counters S1 SETUP 20M SISO">CN4240-TD LTE CP Counters S1 SETUP 20M SISO</a>
- <td class="msg">'D:\TestCase\trunk\log\UDPLog_Thu_Mar_17_23_21_28_2011.log' does not contain '[u'now OnAir', u'PBCH']'</td>
- <td class="msg">'D:\TestCase\trunk\log\UDPLog_Thu_Mar_17_23_21_28_2011.log' does not contain '[u'now OnAir', u'PBCH']'</td>
- <td class="msg">IndexError: list index out of range</td>
<a class="name" name="suite_C-plane.CN4240-TD LTE CP Counters ENB EPS BEARER REL REQ RNL RLF 20M SISO" title="C-plane.CN4240-TD LTE CP Counters ENB EPS BEARER REL REQ RNL RLF 20M SISO">CN4240-TD LTE CP Counters ENB EPS BEARER REL REQ RNL RLF 20M SISO</a>
<td class="msg">error: (10060, 'Operation timed out')</td>
<a class="name" name="suite_C-plane.CN4240-TD LTE CP Counters Paging 20M SISO" title="C-plane.CN4240-TD LTE CP Counters Paging 20M SISO">CN4240-TD LTE CP Counters Paging 20M SISO</a>
<td class="msg">IndexError: list index out of range</td>
<a class="name" name="suite_C-plane.CN4240-TD LTE CP Counters S1 SETUP 20M SISO" title="C-plane.CN4240-TD LTE CP Counters S1 SETUP 20M SISO">CN4240-TD LTE CP Counters S1 SETUP 20M SISO</a>
<td class="msg">'D:\TestCase\trunk\log\UDPLog_Thu_Mar_17_23_21_28_2011.log' does not contain '[u'now OnAir', u'PBCH']'</td>
<td class="msg">'D:\TestCase\trunk\log\UDPLog_Thu_Mar_17_23_21_28_2011.log' does not contain '[u'now OnAir', u'PBCH']'</td>
<td class="msg">IndexError: list index out of range</td>
问题一:
我会写出每行提出的东西,比如第一行的筛选命令:awk 'BEGIN {FS="\""} {print $4}' | awk 'BEGIN {FS="."} {print $2}';我也会写第二行的筛选命令。可是这两套筛选标准的命令不一样,我如何对所有行写一个命令?
问题二:
代码中每一个class=“name”下的下一行可能有多行的class=“msg”,我只需要取多个msg中的第一行。我如何做到呢?
问题三:
代码输出时我想加点注释再输出,比如:
SUITE NAME:CN4240-TD LTE CP Counters ENB EPS BEARER REL REQ RNL RLF 20M SISO;
ERROR MASSAGE:error: (10060, 'Operation timed out');
SUITE NAME:CN4240-TD LTE CP Counters Paging 20M SISO;
ERROR MASSAGE:IndexError: list index out of range;
红色部分为注释。每行的注释我也还是会加,但是奇数行和偶数行的注释不一样怎么办呢?
问完了,问了这么多问题。好期待有高手帮我解答:em21: 会有人解答吗?
作者: Tennessee3Waltz 发布时间: 2011-03-20
- awk -v RS="<a|</?td" -v FS="C-plane.|\"|>" '/class="name"/{print "SUITE NAME: "$8";";getline v;print "ERROR MASSAGE: "gensub(/.*msg">(.*)/,"\\1",1,v)";"} ' file
- SUITE NAME: CN4240-TD LTE CP Counters ENB EPS BEARER REL REQ RNL RLF 20M SISO;
- ERROR MASSAGE: error: (10060, 'Operation timed out');
- SUITE NAME: CN4240-TD LTE CP Counters Paging 20M SISO;
- ERROR MASSAGE: IndexError: list index out of range;
- SUITE NAME: CN4240-TD LTE CP Counters S1 SETUP 20M SISO;
- ERROR MASSAGE: 'D:\TestCase\trunk\log\UDPLog_Thu_Mar_17_23_21_28_2011.log' does not contain '[u'now OnAir', u'PBCH']';
作者: yinyuemi 发布时间: 2011-03-20
awk -v RS="<a|</td|<td class=\"msg\">" -v FS="C-plane.|\"|>|" '/class="name"/{print "SUITE NAME: "$8";";getline v;print "ERROR MASSAGE: "v";"} ' file
作者: yinyuemi 发布时间: 2011-03-20
回复 yinyuemi
你真是太棒了,这么快就写好了。为了用你的指令,我正在apt-get install gawk。
我有一个扩展的问题:
假如经过了刚才的处理后得到的输出是:
- SUITE NAME: CN4240-TD LTE CP Counters ENB EPS BEARER REL REQ RNL RLF 20M SISO;
- ERROR MASSAGE: error: (10060, 'Operation timed out');
- SUITE NAME: CN4240-TD LTE CP Counters Paging 20M SISO;
- ERROR MASSAGE: IndexError: list index out of range;
- SUITE NAME: CN4240-TD LTE CP Counters S1 SETUP 20M SISO;
- ERROR MASSAGE: 'D:\TestCase\trunk\log\UDPLog_Thu_Mar_17_23_21_28_2011.log' does not contain '[u'now OnAir', u'PBCH']';
- SUITE NAME: CN4240-TD LTE CP Counters S1 SETUP 10M MIMO;
- ERROR MASSAGE: 'D:\TestCase\trunk\log\UDPLog_Thu_Mar_17_23_21_28_2011.log' does not contain '[u'now OnAir', u'PBCH']';
- SUITE NAME: CN4240-TD LTE CP Counters Paging 20M MIMO for CP;
- ERROR MASSAGE: IndexError: list index out of range;
- SUITE NAME: CN4240-TD LTE CP Counters S1 SETUP 15M MIMO ENB EPS BEARE;
- ERROR MASSAGE: 'D:\TestCase\trunk\log\UDPLog_Thu_Mar_17_23_21_28_2011.log' does not contain '[u'now OnAir', u'PBCH']';
SUITE NAME: CN4240-TD LTE CP Counters ENB EPS BEARER REL REQ RNL RLF 20M SISO;
ERROR MASSAGE: error: (10060, 'Operation timed out');
SUITE NAME: CN4240-TD LTE CP Counters Paging 20M SISO;
ERROR MASSAGE: IndexError: list index out of range;
SUITE NAME: CN4240-TD LTE CP Counters S1 SETUP 20M SISO;
ERROR MASSAGE: 'D:\TestCase\trunk\log\UDPLog_Thu_Mar_17_23_21_28_2011.log' does not contain '[u'now OnAir', u'PBCH']';
SUITE NAME: CN4240-TD LTE CP Counters S1 SETUP 10M MIMO;
ERROR MASSAGE: 'D:\TestCase\trunk\log\UDPLog_Thu_Mar_17_23_21_28_2011.log' does not contain '[u'now OnAir', u'PBCH']';
SUITE NAME: CN4240-TD LTE CP Counters Paging 20M MIMO for CP;
ERROR MASSAGE: IndexError: list index out of range;
SUITE NAME: CN4240-TD LTE CP Counters S1 SETUP 15M MIMO ENB EPS BEARE;
ERROR MASSAGE: 'D:\TestCase\trunk\log\UDPLog_Thu_Mar_17_23_21_28_2011.log' does not contain '[u'now OnAir', u'PBCH']';
你看现在这些信息中有的ERROR MASSAGE是重复的(SUITE NAME不会重复),我们先定义把SUITE NAME和ERROR MASSAGE叫做一对。若ERROR MASSAGE有重复的,则不再输出,并且相应成对的SUITE NAME也不输出。因为我只要是统计有哪些出错类型。即,希望输出是:
SUITE NAME: CN4240-TD LTE CP Counters ENB EPS BEARER REL REQ RNL RLF 20M SISO;
ERROR MASSAGE: error: (10060, 'Operation timed out');
SUITE NAME: CN4240-TD LTE CP Counters Paging 20M SISO;
ERROR MASSAGE: IndexError: list index out of range;
SUITE NAME: CN4240-TD LTE CP Counters S1 SETUP 20M SISO;
ERROR MASSAGE: 'D:\TestCase\trunk\log\UDPLog_Thu_Mar_17_23_21_28_2011.log' does not contain '[u'now OnAir', u'PBCH']';
该如何做到呢?
作者: Tennessee3Waltz 发布时间: 2011-03-20
:a
/<a class=/, /<\/a>/{
s/.*suite_C-plane\.\([^"]*\)" title=".*/\1/;
ta
}
/<td class=/, /<\/td>/{
s/.*class="msg">\([^<]*\)<.*/\1/;
ta
}
作者: chenbin200818 发布时间: 2011-03-20
作者: chenbin200818 发布时间: 2011-03-20
- awk 'BEGIN{ RS="SUITE NAME";FS="\n";ORS=""}!a[$2]++&&NR>1{print RS$0}' file
- SUITE NAME: CN4240-TD LTE CP Counters ENB EPS BEARER REL REQ RNL RLF 20M SISO;
- ERROR MASSAGE: error: (10060, 'Operation timed out');
- SUITE NAME: CN4240-TD LTE CP Counters Paging 20M SISO;
- ERROR MASSAGE: IndexError: list index out of range;
- SUITE NAME: CN4240-TD LTE CP Counters S1 SETUP 20M SISO;
- ERROR MASSAGE: 'D:\TestCase\trunk\log\UDPLog_Thu_Mar_17_23_21_28_2011.log' does not contain '[u'now OnAir', u'PBCH']';
作者: yinyuemi 发布时间: 2011-03-20
谢谢你的回复,这里真是高手如云啊。能不能麻烦把代码写一下呢?我不知道该怎么写呢。
作者: Tennessee3Waltz 发布时间: 2011-03-20
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28