免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12345下一页
最近访问板块 发新帖
查看: 5349 | 回复: 42

[文本处理] 找到匹配行并打印其前5行 [复制链接]

论坛徽章:
0
发表于 2017-03-13 15:53 |显示全部楼层
各位好,请问一个问题,在javacore的文件里面,比如下面这段:
3XMTHREADINFO      "[ACTIVE] ExecuteThread: '24' for queue: 'weblogic.kernel.Default (self-tuning)'" J9VMThread:0x00000000C0AD8200, j9thread_t:0x0000010019819F50, java/lang/Threa
d:0x0000000041280628, state:R, prio=5
3XMJAVALTHREAD            (java/lang/Thread getId:0x37, isDaemon:true)
3XMTHREADINFO1            (native thread ID:0x1AF0091, native priority:0x5, native policy:UNKNOWN)
3XMTHREADINFO3           Java callstack:
4XESTACKTRACE                at java/net/SocketInputStream.socketRead0(Native Method)
4XESTACKTRACE                at java/net/SocketInputStream.read(SocketInputStream.java:140(Compiled Code))
4XESTACKTRACE                at oracle/net/ns/Packet.receive(Packet.java:300(Compiled Code))
4XESTACKTRACE                at oracle/net/ns/DataPacket.receive(DataPacket.java:106(Compiled Code))
4XESTACKTRACE                at oracle/net/ns/NetInputStream.getNextPacket(NetInputStream.java:315(Compiled Code))
4XESTACKTRACE                at oracle/net/ns/NetInputStream.read(NetInputStream.java:260(Compiled Code))
4XESTACKTRACE                at oracle/net/ns/NetInputStream.read(NetInputStream.java:185(Compiled Code))
4XESTACKTRACE                at oracle/net/ns/NetInputStream.read(NetInputStream.java:102(Compiled Code))
4XESTACKTRACE                at oracle/jdbc/driver/T4CSocketInputStreamWrapper.readNextPacket(T4CSocketInputStreamWrapper.java:124(Compiled Code))
4XESTACKTRACE                at oracle/jdbc/driver/T4CSocketInputStreamWrapper.read(T4CSocketInputStreamWrapper.java:80(Compiled Code))
4XESTACKTRACE                at oracle/jdbc/driver/T4CMAREngine.unmarshalUB1(T4CMAREngine.java:1137(Compiled Code))
4XESTACKTRACE                at oracle/jdbc/driver/T4CTTIfun.receive(T4CTTIfun.java:290(Compiled Code))
4XESTACKTRACE                at oracle/jdbc/driver/T4CTTIfun.doRPC(T4CTTIfun.java:192(Compiled Code))
4XESTACKTRACE                at oracle/jdbc/driver/T4C8Oall.doOALL(T4C8Oall.java:531(Compiled Code))
4XESTACKTRACE                at oracle/jdbc/driver/T4CPreparedStatement.doOall8(T4CPreparedStatement.java:207(Compiled Code))
4XESTACKTRACE                at oracle/jdbc/driver/T4CPreparedStatement.executeForRows(T4CPreparedStatement.java:1044(Compiled Code))
4XESTACKTRACE                at oracle/jdbc/driver/OracleStatement.executeMaybeDescribe(OracleStatement.java:1199(Compiled Code))
4XESTACKTRACE                at oracle/jdbc/driver/OracleStatement.doExecuteWithTimeout(OracleStatement.java:1289(Compiled Code))
4XESTACKTRACE                at oracle/jdbc/driver/OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:3593(Compiled Code))
4XESTACKTRACE                at oracle/jdbc/driver/OraclePreparedStatement.execute(OraclePreparedStatement.java:3694(Compiled Code))
4XESTACKTRACE                at oracle/jdbc/driver/OraclePreparedStatementWrapper.execute(OraclePreparedStatementWrapper.java:1378(Compiled Code))
4XESTACKTRACE                at weblogic/jdbc/common/internal/ConnectionEnv.testInternal(ConnectionEnv.java:979(Compiled Code))
4XESTACKTRACE                at weblogic/jdbc/common/internal/ConnectionEnv.test(ConnectionEnv.java:917(Compiled Code))
4XESTACKTRACE                at weblogic/jdbc/common/internal/ConnectionEnv.test(ConnectionEnv.java:613(Compiled Code))
4XESTACKTRACE                at weblogic/common/resourcepool/ResourcePoolImpl.testResource(ResourcePoolImpl.java:2271(Compiled Code))
4XESTACKTRACE                at weblogic/common/resourcepool/ResourcePoolImpl.checkResource(ResourcePoolImpl.java:1741(Compiled Code))
4XESTACKTRACE                at weblogic/common/resourcepool/ResourcePoolImpl.checkAndReturnResource(ResourcePoolImpl.java:1651(Compiled Code))
4XESTACKTRACE                at weblogic/common/resourcepool/ResourcePoolImpl.checkAndReturnResource(ResourcePoolImpl.java:1640(Compiled Code))
4XESTACKTRACE                at weblogic/common/resourcepool/ResourcePoolImpl.testUnusedResources(ResourcePoolImpl.java:2094(Compiled Code))
4XESTACKTRACE                at weblogic/common/resourcepool/ResourcePoolImpl.access$1600(ResourcePoolImpl.java:41(Compiled Code))
4XESTACKTRACE                at weblogic/common/resourcepool/ResourcePoolImpl$ResourcePoolMaintanenceTask.timerExpired(ResourcePoolImpl.java:2775(Compiled Code))
4XESTACKTRACE                at weblogic/timers/internal/TimerImpl.run(TimerImpl.java:284(Compiled Code))
4XESTACKTRACE                at weblogic/work/SelfTuningWorkManagerImpl$WorkAdapterImpl.run(SelfTuningWorkManagerImpl.java:545(Compiled Code))
4XESTACKTRACE                at weblogic/work/ExecuteThread.execute(ExecuteThread.java:256(Compiled Code))
4XESTACKTRACE                at weblogic/work/ExecuteThread.run(ExecuteThread.java:221)
3XMTHREADINFO3           Native callstack:
4XENATIVESTACK               JCL_Recv+0x24 (0x09000000009ED424 [libjava.so+0x9424])
4XENATIVESTACK               NET_Read+0x7c (0x09000000019A4508 [libnet.so+0x6508])
4XENATIVESTACK               Java_java_net_SocketInputStream_socketRead0+0x294 (0x09000000019B2AA8 [libnet.so+0x14aa8])
4XENATIVESTACK               (0x0000010027568CBC)
4XENATIVESTACK               (0x09000000013D36D0 [libj9vm24.so+0xe6d0])
4XENATIVESTACK               (0x0900000001469FAC [libj9prt24.so+0x1fac])
4XENATIVESTACK               (0x09000000013D35F0 [libj9vm24.so+0xe5f0])
4XENATIVESTACK               (0x0900000001453C70 [libj9thr24.so+0x1c70])
4XENATIVESTACK               _pthread_body+0xf0 (0x09000000005F8D34 [libpthreads.a+0x3d34])
NULL
3XMTHREADINFO      "[ACTIVE] ExecuteThread: '149' for queue: 'weblogic.kernel.Default (self-tuning)'" J9VMThread:0x00000000C0B5F100, j9thread_t:0x000001001BFA48F0, java/lang/Thre
ad:0x000000004133ED40, state:CW, prio=5
3XMJAVALTHREAD            (java/lang/Thread getId:0xB4, isDaemon:true)
3XMTHREADINFO1            (native thread ID:0x25600FD, native priority:0x5, native policy:UNKNOWN)
3XMTHREADINFO3           Java callstack:
4XESTACKTRACE                at java/lang/Object.wait(Native Method)
4XESTACKTRACE                at java/lang/Object.wait(Object.java:167(Compiled Code))
4XESTACKTRACE                at weblogic/work/ExecuteThread.waitForRequest(ExecuteThread.java:205(Compiled Code))
4XESTACKTRACE                at weblogic/work/ExecuteThread.run(ExecuteThread.java:226)
3XMTHREADINFO3           Native callstack:
4XENATIVESTACK               _event_wait+0x2b8 (0x090000000060BD3C [libpthreads.a+0x16d3c])
4XENATIVESTACK               _cond_wait_local+0x4e4 (0x0900000000619A48 [libpthreads.a+0x24a48])
4XENATIVESTACK               _cond_wait+0xbc (0x090000000061A020 [libpthreads.a+0x25020])
4XENATIVESTACK               pthread_cond_wait+0x1a8 (0x090000000061AC8C [libpthreads.a+0x25c8c])
4XENATIVESTACK               (0x0900000001456170 [libj9thr24.so+0x4170])
4XENATIVESTACK               (0x0900000001455F34 [libj9thr24.so+0x3f34])
4XENATIVESTACK               (0x0900000001455FA0 [libj9thr24.so+0x3fa0])
4XENATIVESTACK               (0x09000000016D0AB4 [libjclscar_24.so+0x27ab4])
4XENATIVESTACK               (0x09000000016D1700 [libjclscar_24.so+0x28700])
4XENATIVESTACK               (0x09000000013D36D0 [libj9vm24.so+0xe6d0])
4XENATIVESTACK               (0x0900000001469FAC [libj9prt24.so+0x1fac])
4XENATIVESTACK               (0x09000000013D35F0 [libj9vm24.so+0xe5f0])
4XENATIVESTACK               (0x0900000001453C70 [libj9thr24.so+0x1c70])
4XENATIVESTACK               _pthread_body+0xf0 (0x09000000005F8D34 [libpthreads.a+0x3d34])
NULL


我想找到java/net/SocketInputStream.socketRead0(Native Method)这个匹配,并且打印前5行,也就是想打印如下:
3XMTHREADINFO      "[ACTIVE] ExecuteThread: '24' for queue: 'weblogic.kernel.Default (self-tuning)'" J9VMThread:0x00000000C0AD8200, j9thread_t:0x0000010019819F50, java/lang/Threa
d:0x0000000041280628, state:R, prio=5
3XMJAVALTHREAD            (java/lang/Thread getId:0x37, isDaemon:true)
3XMTHREADINFO1            (native thread ID:0x1AF0091, native priority:0x5, native policy:UNKNOWN)
3XMTHREADINFO3           Java callstack:
4XESTACKTRACE                at java/net/SocketInputStream.socketRead0(Native Method)


我自己仿照了其他朋友的一些例子,用了下面的:
awk '/java\/net\/SocketInputStream.socketRead0/{print a"\n"b"\n"c"\n"d"\n"$0}{a=b;b=c;c=d;d=$0}' javacore.20170301.095931.5964094.0006.txt
是可以做到,但我想请问一下还有没有其他方法可以做到的,请各位指点一下,谢谢。
PS我的环境是AIX。

论坛徽章:
28
15-16赛季CBA联赛之八一
日期:2016-02-22 19:10:4215-16赛季CBA联赛之深圳
日期:2016-12-01 10:34:0415-16赛季CBA联赛之新疆
日期:2016-12-07 10:24:2915-16赛季CBA联赛之同曦
日期:2016-12-15 12:06:43CU十四周年纪念徽章
日期:2016-12-18 13:03:4415-16赛季CBA联赛之吉林
日期:2017-01-03 15:52:2515-16赛季CBA联赛之辽宁
日期:2017-01-04 14:58:2415-16赛季CBA联赛之辽宁
日期:2017-01-15 09:42:512016科比退役纪念章
日期:2017-02-06 17:21:50黑曼巴
日期:2017-02-10 15:46:1215-16赛季CBA联赛之上海
日期:2017-03-18 10:14:5415-16赛季CBA联赛之青岛
日期:2017-03-18 22:00:44
发表于 2017-03-13 15:59 |显示全部楼层

  1. grep -B5 'java/net/SocketInputStream.socketRead0(Native Method)'
复制代码

?

论坛徽章:
0
发表于 2017-03-13 16:05 |显示全部楼层
回复 2# moperyblue

这是可以的,只有在Linux上才有-B的参数,AIX上的grep没有这个参数的

论坛徽章:
28
15-16赛季CBA联赛之八一
日期:2016-02-22 19:10:4215-16赛季CBA联赛之深圳
日期:2016-12-01 10:34:0415-16赛季CBA联赛之新疆
日期:2016-12-07 10:24:2915-16赛季CBA联赛之同曦
日期:2016-12-15 12:06:43CU十四周年纪念徽章
日期:2016-12-18 13:03:4415-16赛季CBA联赛之吉林
日期:2017-01-03 15:52:2515-16赛季CBA联赛之辽宁
日期:2017-01-04 14:58:2415-16赛季CBA联赛之辽宁
日期:2017-01-15 09:42:512016科比退役纪念章
日期:2017-02-06 17:21:50黑曼巴
日期:2017-02-10 15:46:1215-16赛季CBA联赛之上海
日期:2017-03-18 10:14:5415-16赛季CBA联赛之青岛
日期:2017-03-18 22:00:44
发表于 2017-03-13 16:21 |显示全部楼层
回复 3# keymanlu


  1. awk '{a[NR]=$0}$0~"java/net/SocketInputStream.socketRead0\\(Native Method\\)"{n=NR}END{for(i=n-5;i<=n;i++)print i,a[i]}'
复制代码

论坛徽章:
0
发表于 2017-03-13 17:04 |显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
307
程序设计版块每周发帖之星
日期:2016-04-08 00:41:33操作系统版块每日发帖之星
日期:2015-09-02 06:20:00每日论坛发贴之星
日期:2015-09-02 06:20:00程序设计版块每日发帖之星
日期:2015-09-04 06:20:00每日论坛发贴之星
日期:2015-09-04 06:20:00每周论坛发贴之星
日期:2015-09-06 22:22:00程序设计版块每日发帖之星
日期:2015-09-09 06:20:00程序设计版块每日发帖之星
日期:2015-09-19 06:20:00程序设计版块每日发帖之星
日期:2015-09-20 06:20:00每日论坛发贴之星
日期:2015-09-20 06:20:00程序设计版块每日发帖之星
日期:2015-09-22 06:20:00程序设计版块每日发帖之星
日期:2015-09-24 06:20:00
发表于 2017-03-13 18:08 |显示全部楼层
本帖最后由 sunzhiguolu 于 2017-03-13 18:15 编辑

java/net/SocketInputStream.socketRead0(Native Method)
关键词前面的记录是否至少包含5条还是不固定 ?

另外,你的环境是否支持 perl?

论坛徽章:
0
发表于 2017-03-13 18:40 |显示全部楼层

谢谢指点,我测试了一下,这个命令可以搜索到一次并打印前五行,如果有多个匹配的次数,如何能按照这个前五行的目的,把所有匹配的前五行都一一打印呢?

论坛徽章:
0
发表于 2017-03-13 18:46 |显示全部楼层
回复 5# 本友会机友会摄友会

谢谢分享,我也在powershell测试了一下,发现没有输出,是否和我javacore的文件格式有关呢?aix下的格式和windows的dos格式不一样?

论坛徽章:
0
发表于 2017-03-13 18:51 |显示全部楼层
回复 6# sunzhiguolu

javaocore的格式是一样的,所以我想取到这个关键字的倒数第五行那个线程id。这个关键字倒数第五行一定有一个线程id的。我在AIX环境上是可以用perl命令的:
perl -v

This is perl, v5.8.8 built for aix-thread-multi

请问perl有更容易实现的办法?我其实没写过perl的,所以不熟悉perl脚本。

论坛徽章:
28
15-16赛季CBA联赛之八一
日期:2016-02-22 19:10:4215-16赛季CBA联赛之深圳
日期:2016-12-01 10:34:0415-16赛季CBA联赛之新疆
日期:2016-12-07 10:24:2915-16赛季CBA联赛之同曦
日期:2016-12-15 12:06:43CU十四周年纪念徽章
日期:2016-12-18 13:03:4415-16赛季CBA联赛之吉林
日期:2017-01-03 15:52:2515-16赛季CBA联赛之辽宁
日期:2017-01-04 14:58:2415-16赛季CBA联赛之辽宁
日期:2017-01-15 09:42:512016科比退役纪念章
日期:2017-02-06 17:21:50黑曼巴
日期:2017-02-10 15:46:1215-16赛季CBA联赛之上海
日期:2017-03-18 10:14:5415-16赛季CBA联赛之青岛
日期:2017-03-18 22:00:44
发表于 2017-03-13 19:02 |显示全部楼层
本帖最后由 moperyblue 于 2017-03-13 19:04 编辑

回复 7# keymanlu


  1. awk '{a[NR]=$0}$0~"java/net/SocketInputStream.socketRead0\\(Native Method\\)"{b[++c]=NR}END{if(length(b)){for(j=1;j<=c;j++){for(i=b[j]-5;i<=b[j];i++)if(a[i])print i,a[i]}}}'
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP