免费注册 查看新帖 |

Chinaunix

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

[文本处理] 有没有什么办法,在一个文件里面,先定位到某一行,然后取这一行的下面两行文本? [复制链接]

论坛徽章:
0
发表于 2012-09-22 14:42 |显示全部楼层
有没有办法,在一个文件里面先定位到某行,然后取这一行的下面两行的文本?

例如下面这段文本。我想先定位在 “ID:  113808924” 这一行, 然后取它下面的两行。
我是菜鸟。希望各位不吝赐教,谢谢

SEVERE: Error code:61 - Date parsing exception thrown at URL
ID:  113808924
AID:  1356475501
Posted:  null

Format:  MM dd yyyy
Sep 22, 2012 8:40:17 AM com.io.log.SystemLogger printSevere
SEVERE: Error code:61 - Date parsing exception thrown at URL
ID:  113808924
AID:  1367101375
Posted:  null
Format:  MM dd yyyy
Sep 22, 2012 8:40:17 AM com.io.log.SystemLogger printSevere
SEVERE: Error code:61 - Date parsing exception thrown at URL
ID:  113808924
AID:  1362779158
Posted:  null
Format:  MM dd yyyy
Sep 22, 2012 8:40:21 AM com.io.log.SystemLogger printSevere
SEVERE: Error code:61 - Date parsing exception thrown at URL
ID:  113808924
AID:  1325709142
Posted:  null
Format:  MM dd yyyy

论坛徽章:
1
2015年迎新春徽章
日期:2015-03-04 09:58:11
发表于 2012-09-22 14:52 |显示全部楼层
grep -n “” 取得行号,
再取n+1,n+2行的内容。。。命令写了,没有环境 不能调试。。。我的思路是这样的

论坛徽章:
0
发表于 2012-09-22 15:02 |显示全部楼层
回复 2# 这个冬天不冷

谢谢“”

grep -n “”   

这个命令获取的是“行号 + 该行的文本”  我该怎样使用行号呢?

论坛徽章:
0
发表于 2012-09-22 15:07 |显示全部楼层
回复 1# cpy9981


ID:  113808924 你有好几个这样的行。你要取第几个“ID:  113808924 ”下面的两行?   

论坛徽章:
1
2015年迎新春徽章
日期:2015-03-04 09:58:11
发表于 2012-09-22 15:14 |显示全部楼层
回复 3# cpy9981


    再加个官道 | awk ‘{print $1}',就是所有id的行号,针对每个行号取下面两行 就行了

论坛徽章:
0
发表于 2012-09-22 15:18 |显示全部楼层
回复 4# kk5234


是的,
其实是一个异常文件,我想处理这个异常文件把错误都提取处理

我是想循环读取这个文件,先定位到“ID:  113808924 ” 这类行,然后取出它下面的两行内容。

现在行是可以定位到,但是不知道怎么一下子把这行的下面两行一同取出来。

论坛徽章:
0
发表于 2012-09-22 15:20 |显示全部楼层
回复 5# 这个冬天不冷


对的,

通过“| awk ‘{print $1}'” 这种方式取出行号,对的,谢谢啊!

论坛徽章:
0
发表于 2012-09-22 15:21 |显示全部楼层
本帖最后由 kk5234 于 2012-09-22 15:23 编辑

回复 6# cpy9981

awk '/ID:  113808924/{n=3}--n>=0' file                 #所有ID:  113808924的行和它下面的两行
awk '/ID:  113808924/{n=2;next}--n>=0' file         #所有ID:  113808924下面的两行
   

论坛徽章:
0
发表于 2012-09-22 15:23 |显示全部楼层
回复 4# kk5234


我是想这样弄,

把这些行放进文件里,

然后循环读取,当读到“ID:  113808924”  这样的行的时候,就把它下面的两行一并取出来。放到其他文件里面

接着继续循环,只要匹配到“ID:  113808924”  这样的行,就把它下面的两行取出来。

就是这样

论坛徽章:
0
发表于 2012-09-22 15:30 |显示全部楼层
回复 8# kk5234


  非常好用,  跪谢,叩谢!

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP