免费注册 查看新帖 |

Chinaunix

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

查找匹配的行,然后显示一段的内容 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2014-12-14 08:35 |只看该作者 |倒序浏览
有文件包含下面内容。查找Formula行含有heapdump的文字。然后显示 Name/ Description /Formula. 谢谢了。

Name           : JavaCoreHeap_1_Crit
Description    : AWF#15042
Type            : UNIX OS
Formula        : MFA_01a/heapdump OR javacore
Distribution   : cpomfaap01

Name           : CORE_FILES
Description    : AWF# 16145, LZ
Type            : UNIX OS
Formula        : File_Information.Path
Distribution   : ecasdm36:KUX

Name           : JavaCoreHeap_2_Crit
Description    : AWF#15042,
Type            : UNIX OS
Formula        : /td/logs/WebLogs/MFA_02a
Distribution   : cpomfaap02:KUX,scomfaap02:KUX

Name            : Core_Files_Crit
Description    : moved over from ITM5
Type             : UNIX OS
Formula        : heapdump
Distribution   : p1bwap32:KUX,p1bwap33:KUX

需要的结果如下:

Name            : JavaCoreHeap_1_Crit
Description    : AWF#15042
Formula         : MFA_01a/heapdump OR javacore

Name            : Core_Files_Crit
Description    : moved over from ITM5
Formula        : heapdump

论坛徽章:
8
技术图书徽章
日期:2013-08-22 11:21:28未羊
日期:2015-01-19 22:22:25巳蛇
日期:2014-08-11 16:53:08子鼠
日期:2014-05-29 09:04:44摩羯座
日期:2014-04-11 14:15:07丑牛
日期:2014-01-24 12:41:28金牛座
日期:2013-11-21 17:38:28射手座
日期:2015-01-21 08:50:32
2 [报告]
发表于 2014-12-14 10:39 |只看该作者
$/="/n/n";
@tmp=(split /\n/);
print join("\n",@tmp[0,1,3]) if $tmp[3]=~/heapdump/;

论坛徽章:
0
3 [报告]
发表于 2014-12-14 12:49 |只看该作者
不好意思,我刚开始学perl, 是这样的吗? 运行过程出现这样的错误:

Use of uninitialized value in join or string at ./tt line 8, <DATA> chunk 1.
Use of uninitialized value in join or string at ./tt line 8, <DATA> chunk 1.

Use of uninitialized value in pattern match (m//) at ./tt line 8, <DATA> chunk 1.

#!/usr/bin/perl -w
use warnings;
use strict;
my @tmp;
while(<DATA>) {
        $/="\n\n";
        @tmp=split("\n");
        print join("\n",@tmp[0,1,3]);print "\n\n" if $tmp[3]=~/heapdump/;

}
__DATA__
Name                   : TD_OMFA_JavaCoreHeap_1_Crit
Description            : AWF#15042 &14935 , Date14Jan2013, Creator JA
Type                   : UNIX OS
Formula                : VALUE File_Information.File *EQ javacore*
Distribution           : cpomfaap01:KUX,scomfaap01:KUX

Name                   : TD_WEBSPHERE_CORE_FILES_3646_Cr
Description            : AWF# 16145, LZ
Type                   : UNIX OS
Formula                : heapdump
Distribution           : ecasdm36:KUX,ecasdm46:KUX

Name                   : TD_OMFA_JavaCoreHeap_2_Crit
Description            : AWF#15042, Date14Jan2013, Creator JA
Type                   : UNIX OS
Formula                : *EQ javacore*
Distribution           : cpomfaap02:KUX,scomfaap02:KUX

论坛徽章:
8
技术图书徽章
日期:2013-08-22 11:21:28未羊
日期:2015-01-19 22:22:25巳蛇
日期:2014-08-11 16:53:08子鼠
日期:2014-05-29 09:04:44摩羯座
日期:2014-04-11 14:15:07丑牛
日期:2014-01-24 12:41:28金牛座
日期:2013-11-21 17:38:28射手座
日期:2015-01-21 08:50:32
4 [报告]
发表于 2014-12-14 13:52 |只看该作者
回复 3# fzhcl
  1. #!/usr/bin/perl -w
  2. use warnings;
  3. use strict;
  4. $/="\n\n";
  5. while(<DATA>) {
  6.         my @tmp=split("\n");
  7.         print join("\n",@tmp[0,1,3]).$/ if $tmp[3]=~/heapdump/;

  8. }
  9. __DATA__
  10. Name                   : TD_OMFA_JavaCoreHeap_1_Crit
  11. Description            : AWF#15042 &14935 , Date14Jan2013, Creator JA
  12. Type                   : UNIX OS
  13. Formula                : VALUE File_Information.File *EQ javacore*
  14. Distribution           : cpomfaap01:KUX,scomfaap01:KUX

  15. Name                   : TD_WEBSPHERE_CORE_FILES_3646_Cr
  16. Description            : AWF# 16145, LZ
  17. Type                   : UNIX OS
  18. Formula                : heapdump
  19. Distribution           : ecasdm36:KUX,ecasdm46:KUX

  20. Name                   : TD_OMFA_JavaCoreHeap_2_Crit
  21. Description            : AWF#15042, Date14Jan2013, Creator JA
  22. Type                   : UNIX OS
  23. Formula                : *EQ javacore*
  24. Distribution           : cpomfaap02:KUX,scomfaap02:KUX
复制代码

论坛徽章:
0
5 [报告]
发表于 2014-12-14 20:49 |只看该作者
回复 4# huang6894

精炼,还是想追问一下,貌似如下也行,但一般不怎么用,能说说好坏吗?
while(<DATA>) {
        print $_.$/ if ( /Formula.*heapdump.*\nDistribution/ms );

}
   

论坛徽章:
0
6 [报告]
发表于 2014-12-15 01:30 |只看该作者
谢谢huang6894 。 非常好

论坛徽章:
0
7 [报告]
发表于 2014-12-15 01:42 |只看该作者
回复 5# lyb3708621


    这个也不错,但是print 所有的$_ 如果Formula   有 *heapdump*, 这样把多余的行也打印出来了。 but anyway,在这个script中, 重点是学了($_.$/)。谢谢。

结果如下:

Name                   : TD_WEBSPHERE_CORE_FILES_3646_Cr
Description            : AWF# 16145, LZ
Type                   : UNIX OS
Formula                : heapdump
Distribution           : ecasdm36:KUX,ecasdm46:KUX
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP