免费注册 查看新帖 |

Chinaunix

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

[文本处理] 各位大神,帮忙看下怎么读指定行下面的几行 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-12-26 08:58 |只看该作者 |倒序浏览
例:
文件a如下:
set a 0
gl()         gr()
123456
123456
789789
123456789
set a 1
gl()         gr()
987987
654654
321321
1234564566
set a 2
.....
.....
.....
.....
要求:每次从set a * 这行下面开始取4行

论坛徽章:
93
2015年辞旧岁徽章
日期:2019-10-10 10:51:15CU大牛徽章
日期:2014-02-21 14:21:56CU十二周年纪念徽章
日期:2020-10-15 16:55:55CU大牛徽章
日期:2014-02-21 14:22:07羊年新春福章
日期:2019-10-10 10:51:39CU大牛徽章
日期:2019-10-10 10:55:38季节之章:春
日期:2020-10-15 16:57:40ChinaUnix元老
日期:2019-10-10 10:54:42季节之章:冬
日期:2019-10-10 10:57:17CU大牛徽章
日期:2014-02-21 14:22:52CU大牛徽章
日期:2014-03-13 10:40:30CU大牛徽章
日期:2014-02-21 14:23:15
2 [报告]
发表于 2013-12-26 09:11 |只看该作者
grep -A 可以满足你的需求。

论坛徽章:
0
3 [报告]
发表于 2013-12-26 09:12 |只看该作者
回复 2# seesea2517


    怎么用

论坛徽章:
32
处女座
日期:2013-11-20 23:41:20双子座
日期:2014-06-11 17:20:43戌狗
日期:2014-06-16 11:05:00处女座
日期:2014-07-22 17:30:47狮子座
日期:2014-07-28 15:38:17金牛座
日期:2014-08-05 16:34:01亥猪
日期:2014-08-18 13:34:25白羊座
日期:2014-09-02 15:03:55金牛座
日期:2014-11-10 10:23:58处女座
日期:2014-12-02 09:17:52程序设计版块每日发帖之星
日期:2015-06-16 22:20:002015亚冠之塔什干火车头
日期:2015-06-20 23:28:22
4 [报告]
发表于 2013-12-26 09:13 |只看该作者
  1. awk 'k&&i++<4;/^set a/{k=1;i=0}'
复制代码
  1. sed -nr '/^set a/{n;:1;N;/(.*\n){3}/{p;b};b1}'
复制代码

论坛徽章:
0
5 [报告]
发表于 2013-12-26 09:20 |只看该作者
回复 4# yestreenstars


    能详细讲解一下吗,谢谢,新手,见谅

论坛徽章:
32
处女座
日期:2013-11-20 23:41:20双子座
日期:2014-06-11 17:20:43戌狗
日期:2014-06-16 11:05:00处女座
日期:2014-07-22 17:30:47狮子座
日期:2014-07-28 15:38:17金牛座
日期:2014-08-05 16:34:01亥猪
日期:2014-08-18 13:34:25白羊座
日期:2014-09-02 15:03:55金牛座
日期:2014-11-10 10:23:58处女座
日期:2014-12-02 09:17:52程序设计版块每日发帖之星
日期:2015-06-16 22:20:002015亚冠之塔什干火车头
日期:2015-06-20 23:28:22
6 [报告]
发表于 2013-12-26 09:30 |只看该作者
回复 5# hazhuyg
  1. awk 'k&&i++<4; #判断k的值,如果为假,则什么都不执行;如果为真,判断i是否小于4,然后i的值自增1,并输出该行。
  2. /^set a/{k=1;i=0}' #匹配到以set a开头的行时,初始化k和i的值。
复制代码
  1. sed -nr ' #-n为静默模式,-r为扩展正则表达式
  2. /^set a/{n; #匹配到以set a开头的行时,读入下一行到模式空间
  3. :1; #设置标签1
  4. N; #添加下一行到当前行下面
  5. /(.*\n){3}/{p;b}; #匹配到3个换行符时打印并跳转到脚本的末尾
  6. b1}' #跳转到标签1所在的位置
复制代码

论坛徽章:
93
2015年辞旧岁徽章
日期:2019-10-10 10:51:15CU大牛徽章
日期:2014-02-21 14:21:56CU十二周年纪念徽章
日期:2020-10-15 16:55:55CU大牛徽章
日期:2014-02-21 14:22:07羊年新春福章
日期:2019-10-10 10:51:39CU大牛徽章
日期:2019-10-10 10:55:38季节之章:春
日期:2020-10-15 16:57:40ChinaUnix元老
日期:2019-10-10 10:54:42季节之章:冬
日期:2019-10-10 10:57:17CU大牛徽章
日期:2014-02-21 14:22:52CU大牛徽章
日期:2014-03-13 10:40:30CU大牛徽章
日期:2014-02-21 14:23:15
7 [报告]
发表于 2013-12-26 09:58 |只看该作者
回复 3# hazhuyg
  1. [seesea@UC ~]$ grep -A4 'set a' file
  2. set a 0
  3. gl()     gr()
  4. 123456
  5. 123456
  6. 789789
  7. --
  8. set a 1
  9. gl()         gr()
  10. 987987
  11. 654654
  12. 321321
  13. --
  14. set a 2
  15. .....
  16. .....
  17. .....
  18. .....

  19. # 如果不需要 set a 这一行,就要再过滤掉
  20. [seesea@UC ~]$ grep -A4 'set a' file | sed '/set a/d'
  21. gl()     gr()
  22. 123456
  23. 123456
  24. 789789
  25. --
  26. gl()         gr()
  27. 987987
  28. 654654
  29. 321321
  30. --
  31. .....
  32. .....
  33. .....
  34. .....
复制代码

论坛徽章:
769
金牛座
日期:2014-02-26 17:49:58水瓶座
日期:2014-02-26 18:10:15白羊座
日期:2014-04-15 19:29:52寅虎
日期:2014-04-17 19:43:21酉鸡
日期:2014-04-19 21:24:10子鼠
日期:2014-04-22 13:55:24卯兔
日期:2014-04-22 14:20:58亥猪
日期:2014-04-22 16:13:09狮子座
日期:2014-05-05 22:31:17摩羯座
日期:2014-05-06 10:32:53处女座
日期:2014-05-12 09:23:11子鼠
日期:2014-05-21 18:21:27
8 [报告]
发表于 2013-12-26 10:12 |只看该作者
回复 6# yestreenstars

这个真详细,楼主好好琢磨下,
应该就懂了,我也是这么从
论坛这些大大的代码里学习的。


   

论坛徽章:
0
9 [报告]
发表于 2013-12-26 10:23 |只看该作者
回复 4# yestreenstars


    如果想把set a 0 或1 中的0 或1 作为变量传进去,作为为匹配项,逐条显示。?

论坛徽章:
32
处女座
日期:2013-11-20 23:41:20双子座
日期:2014-06-11 17:20:43戌狗
日期:2014-06-16 11:05:00处女座
日期:2014-07-22 17:30:47狮子座
日期:2014-07-28 15:38:17金牛座
日期:2014-08-05 16:34:01亥猪
日期:2014-08-18 13:34:25白羊座
日期:2014-09-02 15:03:55金牛座
日期:2014-11-10 10:23:58处女座
日期:2014-12-02 09:17:52程序设计版块每日发帖之星
日期:2015-06-16 22:20:002015亚冠之塔什干火车头
日期:2015-06-20 23:28:22
10 [报告]
发表于 2013-12-26 10:54 |只看该作者
回复 9# hazhuyg
酱紫?
  1. awk -vt=0 'k&&i++<4;$0~"^set a "t{k=1;i=0}'
复制代码
  1. awk -vt=1 'k&&i++<4;$0~"^set a "t{k=1;i=0}'
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP