免费注册 查看新帖 |

ChinaUnix.net

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

[文本处理] 学习收集一个脚本,请大神提供姿势不限,谢谢 [复制链接]

论坛徽章:
0
发表于 2019-01-28 23:42 |显示全部楼层
file文件如下:
1
2
3
4
5
6
7
8
9
10
需求1:取出关键字"5"前面3行
需求2:取出关键字"5"后面3行
grep AB这种就不贴了,哈哈

论坛徽章:
0
发表于 2019-01-29 11:39 |显示全部楼层
本帖最后由 csccyab 于 2019-01-29 11:41 编辑


$ cat 1.txt
1
2
3
4
5
a
b
c
d
5
a
5
a
5
6
7
8
9
10

$ sed -n '/5/{N;N;N;p}' 1.txt
5
a
b
c
5
a
5
a
5
6
7
8


$ awk 'b==1{c++; a=a?a"\n"$0:$0} /5/{if (b==1){print a; a=""; c=0} else {a=$0; b=1}} c==3{print a; a=""; b=0; c=0}' 1.txt
5
a
b
c
5
a
5
a
5
6
7
8

论坛徽章:
0
发表于 2019-01-29 11:42 |显示全部楼层
我先來.....grep -A 的 sed/awk

论坛徽章:
6
程序设计版块每日发帖之星
日期:2016-05-11 06:20:00操作系统版块每日发帖之星
日期:2016-05-12 06:20:00每日论坛发贴之星
日期:2016-05-12 06:20:00操作系统版块每日发帖之星
日期:2016-05-14 06:20:00程序设计版块每日发帖之星
日期:2016-05-31 06:20:00每日论坛发贴之星
日期:2016-05-31 06:20:00
发表于 2019-01-30 16:54 |显示全部楼层
本帖最后由 1cpuer 于 2019-01-30 17:01 编辑

#,; PWD=/mnt/i/je-d/sou-d 12172): # 2019-01-30 16:47:14 1548838034
#.: seq 12 | awk '/5/{a=NR;print a}'
5

#,; PWD=/mnt/i/je-d/sou-d 12173): # 2019-01-30 16:48:29 1548838109
#.: seq 12 | awk '/5/{a=NR;print a-3,a+3}'
2 8

#,; PWD=/mnt/i/je-d/sou-d 12174): # 2019-01-30 16:49:11 1548838151
#.: seq 12 | awk '/5/{a=NR}NR>=2 && NR<=8{print}'
2
3
4
5
6
7
8

#,; PWD=/mnt/i/je-d/sou-d 12175): # 2019-01-30 16:49:53 1548838193
#.: seq 12 | awk '/5/{a=NR}NR>=a-3 && NR<=a+3{print}'
1
2
3
5
6
7
8



#,; PWD=/mnt/i/je-d/sou-d 1217: # 2019-01-30 16:55:10 1548838510
#.: seq 12 | awk '/5/{a1=NR-3;b1=NR+3}NR>=a1 && NR<=b1{print}'
5
6
7
8

#,; PWD=/mnt/i/je-d/sou-d 12179): # 2019-01-30 16:55:20 1548838520
#.: seq 12 | awk 'b==1{c++; a=a?a"\n"$00} /5/{if (b==1){print a; a=""; c=0} else {a=$0; b=1}} c==3{print a; a=""; b=0; c=0}'
5
6
7
8

论坛徽章:
0
发表于 2019-01-30 21:22 |显示全部楼层
收藏了,谢谢各位大佬了

论坛徽章:
0
发表于 2019-02-13 11:31 |显示全部楼层
seq 10 | sed -rn '1h;1!H;/5/{g;s/[^2-5]\n//g;p}'
2
3
4
5

seq 10 | sed -n '/5/{:a;N;/8/!{$!ba};p}'
5
6
7
8

论坛徽章:
4
15-16赛季CBA联赛之青岛
日期:2018-07-09 14:17:2815-16赛季CBA联赛之八一
日期:2018-08-06 15:30:0515-16赛季CBA联赛之广东
日期:2018-08-09 09:11:2115-16赛季CBA联赛之佛山
日期:2019-02-14 09:26:31
发表于 2019-02-14 11:43 |显示全部楼层
本帖最后由 christmas1102 于 2019-02-14 17:00 编辑

前三行。
  1. seq 9 | awk '{a=a?a"\n"$0:$0}/5/{match(a,/.*((.+\n){3}.+)/,b);print b[1]}'
  2. ---
  3. seq 12 | sed -rn ':a N;/5/!ba;s#.*((\S+\n){3})(.*)$#\1\3#p'
复制代码


后三行
  1. seq 9 | awk '/5/{print;do{getline;print;a++}while(a<3)}'
  2. ---
  3. seq 12 | sed -n '/5/{N;h;n;N;H;x;p}'
复制代码

论坛徽章:
0
发表于 2019-02-15 11:48 |显示全部楼层
jzsjm1002 发表于 2019-02-13 11:31
seq 10 | sed -rn '1h;1!H;/5/{g;s/[^2-5]\n//g;p}'2345seq 10 | sed -n '/5/{:a;N;/8/!{$!ba};p}'5678
  1. bash-4.2$ cat 1.txt
  2. 1
  3. 2
  4. 3
  5. 4
  6. 5
  7. a
  8. b
  9. c
  10. d
  11. 5
  12. a
  13. 5
  14. a
  15. 5
  16. 6
  17. 7
  18. 8
  19. 9
  20. 10
  21. bash-4.2$ sed -rn '1h;1!H;/5/{g;s/[^2-5]\n//g;p}' 1.txt
  22. 2
  23. 3
  24. 4
  25. 5
  26. 2
  27. 3
  28. 4
  29. 5
  30. 5
  31. 2
  32. 3
  33. 4
  34. 5
  35. 5
  36. 5
  37. 2
  38. 3
  39. 4
  40. 5
  41. 5
  42. 5
  43. 5
复制代码

论坛徽章:
0
发表于 2019-02-15 11:51 |显示全部楼层
回6樓

如果 pattern 和 pattern 中間不夠 3 行, 做不到 grep -B 效果

论坛徽章:
0
发表于 2019-02-15 15:44 |显示全部楼层
回复 9# csccyab

我根据文本来的 借用楼上的正则 改下正则就好了 哈
  1. sed -rn '1h;1!H;/5/{g;s/.*((\S+\n){3})/\1/;p}' a00.xml
  2. 2
  3. 3
  4. 4
  5. 5
  6. b
  7. c
  8. d
  9. 5
  10. d
  11. 5
  12. a
  13. 5
  14. a
  15. 5
  16. a
  17. 5
复制代码


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

本版积分规则 发表回复

数据风云,十年变迁
DTCC 第十届中国数据库技术大会已启航!

2019年5月8日~5月10日,由IT168旗下ITPUB企业社区平台主办的第十届中国数据库技术大会(DTCC2019),将在北京隆重召开。大会将邀请百余位行业专家,就热点技术话题进行分享,是广大数据领域从业人士的又一次年度盛会和交流平台。与SACC2018类似,本届大会将采用“3+2”模式:3天传统技术演讲+2天深度主题培训。大会不仅提供超100场的主题演讲,还会提供连续2天的深度课程培训,深化数据领域的项目落地实践方案。
DTCC2019,一场值得期待的数据技术盛会,殷切地希望您报名参与!

活动入口>>
  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP