免费注册 查看新帖 |

Chinaunix

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

[文本处理] 将文件的匹配行以及它的上下各3行填上注释 [复制链接]

论坛徽章:
3
15-16赛季CBA联赛之北控
日期:2016-06-06 21:01:08程序设计版块每日发帖之星
日期:2016-06-19 06:20:00程序设计版块每日发帖之星
日期:2016-07-17 06:20:00
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2016-06-16 10:07 |只看该作者 |倒序浏览
需求:将file1文件中出现"xxoo"的行以及它的上下各3行(共7行)的行首添加注释(#),目标文件为file2。(注意:"xxoo"关键字在文件中可能会出现多次,以及文件每行的列数不固定。)
源文件:
[root@]# cat file1
1 2
3
4 a
aa
bb
cc dd
xxoo
jj kk
yy ll loo
pp
a v b  b
1
23
4 5 6
5
kkkl ll o o oo
oooo ll
xxxxx
ll oo o o
xxoo 89 8989
aa
bb
cc dd
4  78 a
88
目标文件:
[root@]# cat file2
1 2
3
4 a
#aa
#bb
#cc dd
#xxoo
#jj kk
#yy ll loo
#pp
a v b  b
1
23
4 5 6
5
kkkl ll o o oo
#oooo ll
#xxxxx
#ll oo o o
#xxoo 89 8989
#aa
#bb
#cc dd
4  78 a
88

论坛徽章:
2
射手座
日期:2014-10-10 15:59:4715-16赛季CBA联赛之上海
日期:2016-03-03 10:27:14
2 [报告]
发表于 2016-06-16 10:18 |只看该作者
回复 1# 18800375280
  1. awk '/xxoo/{for(i=NR-3;i<=NR+3;i++)a[i]=1}{b[NR]=$0}END{for(i=1;i<=NR;i++)print a[i]?"#"b[i]:b[i]}'
复制代码

论坛徽章:
3
15-16赛季CBA联赛之北控
日期:2016-06-06 21:01:08程序设计版块每日发帖之星
日期:2016-06-19 06:20:00程序设计版块每日发帖之星
日期:2016-07-17 06:20:00
3 [报告]
发表于 2016-06-16 10:21 |只看该作者
回复 2# yinyuemi


    ss的就是好用,好使

论坛徽章:
54
2015亚冠之德黑兰石油
日期:2015-07-07 13:00:1615-16赛季CBA联赛之深圳
日期:2016-03-31 09:03:5415-16赛季CBA联赛之辽宁
日期:2016-05-09 20:38:15程序设计版块每日发帖之星
日期:2016-05-12 06:20:0015-16赛季CBA联赛之四川
日期:2016-05-13 15:19:4715-16赛季CBA联赛之福建
日期:2016-05-15 20:24:34每日论坛发贴之星
日期:2016-05-16 06:20:0015-16赛季CBA联赛之吉林
日期:2016-05-26 11:49:4715-16赛季CBA联赛之广东
日期:2016-05-26 13:49:18极客徽章
日期:2016-12-07 14:05:2315-16赛季CBA联赛之广夏
日期:2016-12-20 17:33:532017金鸡报晓
日期:2017-01-10 15:19:56
4 [报告]
发表于 2016-06-16 11:20 |只看该作者
  1. awk 'NR==FNR{if(/xxoo/)a[NR];next}{for(i in a)if(FNR>i-4&&FNR<i+4)$0="#"$0}1' file file
复制代码

论坛徽章:
3
15-16赛季CBA联赛之北控
日期:2016-06-06 21:01:08程序设计版块每日发帖之星
日期:2016-06-19 06:20:00程序设计版块每日发帖之星
日期:2016-07-17 06:20:00
5 [报告]
发表于 2016-06-16 11:58 |只看该作者
回复 4# haooooaaa


    好使,流弊!

论坛徽章:
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
6 [报告]
发表于 2016-06-16 12:00 |只看该作者
  1. sed -r ':a;1,5{N;ba};N;/(\n.*){3}xxoo.*(\n.*){3}/s/^/#/Mg;P;D'
复制代码

论坛徽章:
3
15-16赛季CBA联赛之北控
日期:2016-06-06 21:01:08程序设计版块每日发帖之星
日期:2016-06-19 06:20:00程序设计版块每日发帖之星
日期:2016-07-17 06:20:00
7 [报告]
发表于 2016-06-16 12:16 |只看该作者
回复 6# moperyblue


    随意哥,真的是好随意啊,我试了好久都没有试出来bug,写的好!如果是将需求改成"xxoo"的上下各3行,共6行(匹配行本身不加注释),那么代码怎么改呢?

论坛徽章:
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
8 [报告]
发表于 2016-06-16 12:40 |只看该作者
本帖最后由 moperyblue 于 2016-06-16 12:43 编辑

[code][/code]

论坛徽章:
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
9 [报告]
发表于 2016-06-16 12:41 |只看该作者
本帖最后由 moperyblue 于 2016-06-16 12:48 编辑

回复 7# 18800375280
  1. sed -r ':a;1,5{N;ba};N;/(\n.*){3}xxoo.*(\n.*){3}/{s/^/#/Mg;s/^#//M4};P;D'
复制代码

论坛徽章:
5
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015年亚洲杯之朝鲜
日期:2015-03-13 22:47:33IT运维版块每日发帖之星
日期:2016-01-09 06:20:00IT运维版块每周发帖之星
日期:2016-03-07 16:27:44
10 [报告]
发表于 2016-06-16 12:51 |只看该作者
本帖最后由 blackold 于 2016-06-16 13:54 编辑
  1. ed -s urfile <<\EOF
  2. 1,$g/xxoo/-3,+3s/^/#/
  3. w
  4. q
  5. EOF
复制代码
谢谢朋友的指正。

评分

参与人数 2信誉积分 +20 收起 理由
ll104567 + 10 666
Herowinter + 10 黑哥就是牛!

查看全部评分

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

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP