免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: minzyyl
打印 上一主题 下一主题

[文本处理] 删除特定行以及替换特定行 [复制链接]

论坛徽章:
7
数据库技术版块每日发帖之星
日期:2015-08-08 06:20:00数据库技术版块每日发帖之星
日期:2015-08-29 06:20:00数据库技术版块每日发帖之星
日期:2015-08-29 06:20:00数据库技术版块每日发帖之星
日期:2015-09-18 06:20:00数据库技术版块每周发帖之星
日期:2015-11-06 19:56:51数据库技术版块每日发帖之星
日期:2016-01-22 06:20:00数据库技术版块每日发帖之星
日期:2016-02-05 06:20:00
11 [报告]
发表于 2013-01-22 15:06 |只看该作者
回复 10# minzyyl

大意是遇到X设个标记,输出时判断下该标记,遇到W时取消该标记
  1. [root@localhost ~]$ echo "X 234
  2. > ;
  3. > Y 2safd
  4. > ;
  5. > Z asdf
  6. > W sdf
  7. >
  8. > askdjfsa
  9. > ;
  10. > adf" | awk '{if($0~/^X/)f=1;}{if(f!=1)print $0;if($0~/^W/)f=0}'

  11. askdjfsa
  12. ;
  13. adf
  14. [root@localhost ~]$
复制代码

论坛徽章:
0
12 [报告]
发表于 2013-01-22 15:33 |只看该作者
回复 11# asdf2110


    搞定,thanks a lots!

论坛徽章:
0
13 [报告]
发表于 2013-01-22 15:49 |只看该作者

回复 2# asdf2110

你好,问一下awk '{if($0~/^A/){$0="B (9 9) (3 8)";line=NR+1;}}{if(line==NR)print "  (9 9) (2 0)"; else if($0!~/^X|Y/) print $0;}' c.txt中if(line==NR)print "  (9 9) (2 0)"是什么意思为什么不会马上打印出来的,还有就是 为什么print "  (9 9) (2 0)"换成$0= "  (9 9) (2 0)"不能输出

论坛徽章:
0
14 [报告]
发表于 2013-01-22 15:54 |只看该作者
回复 2# asdf2110

请问一下
awk '{if($0~/^A/){$0="B (9 9) (3 8)";line=NR+1;}}{if(line==NR)print=" (9 9) (2 0)"; else if($0!~/^X|Y/) print $0;}' aaa.t中的if(line==NR)print=" (9 9) (2 0)"是什么意思,为什么不会直接输出的,还有就是为什么换成if(line==NR)$0=" (9 9) (2 0)"为什么不能直接输入进去的

论坛徽章:
7
数据库技术版块每日发帖之星
日期:2015-08-08 06:20:00数据库技术版块每日发帖之星
日期:2015-08-29 06:20:00数据库技术版块每日发帖之星
日期:2015-08-29 06:20:00数据库技术版块每日发帖之星
日期:2015-09-18 06:20:00数据库技术版块每周发帖之星
日期:2015-11-06 19:56:51数据库技术版块每日发帖之星
日期:2016-01-22 06:20:00数据库技术版块每日发帖之星
日期:2016-02-05 06:20:00
15 [报告]
发表于 2013-01-22 16:02 |只看该作者
回复 14# jun277

NR 是当前行数,他原来不打算输出 A 行的下一行,所以把下一行的行号记下来了,输出时判断下

论坛徽章:
0
16 [报告]
发表于 2013-01-22 16:04 |只看该作者
asdf2110 发表于 2013-01-22 16:02
回复 14# jun277

NR 是当前行数,他原来不打算输出 A 行的下一行,所以把下一行的行号记下来了,输出时 ...

恩,那为啥print 换成 $0=就不行呢

论坛徽章:
7
数据库技术版块每日发帖之星
日期:2015-08-08 06:20:00数据库技术版块每日发帖之星
日期:2015-08-29 06:20:00数据库技术版块每日发帖之星
日期:2015-08-29 06:20:00数据库技术版块每日发帖之星
日期:2015-09-18 06:20:00数据库技术版块每周发帖之星
日期:2015-11-06 19:56:51数据库技术版块每日发帖之星
日期:2016-01-22 06:20:00数据库技术版块每日发帖之星
日期:2016-02-05 06:20:00
17 [报告]
发表于 2013-01-22 16:08 |只看该作者
回复 16# jun277

哪个 print ?


   

论坛徽章:
0
18 [报告]
发表于 2013-01-22 16:11 |只看该作者
本帖最后由 jun277 于 2013-01-22 16:11 编辑

回复 17# asdf2110

为啥if(line==NR)print=" (9 9) (2 0)"换成if(line==NR) $0=" (9 9) (2 0)"后执行整条语句输出不了" (9 9) (2 0)"
   

论坛徽章:
7
数据库技术版块每日发帖之星
日期:2015-08-08 06:20:00数据库技术版块每日发帖之星
日期:2015-08-29 06:20:00数据库技术版块每日发帖之星
日期:2015-08-29 06:20:00数据库技术版块每日发帖之星
日期:2015-09-18 06:20:00数据库技术版块每周发帖之星
日期:2015-11-06 19:56:51数据库技术版块每日发帖之星
日期:2016-01-22 06:20:00数据库技术版块每日发帖之星
日期:2016-02-05 06:20:00
19 [报告]
发表于 2013-01-22 16:15 |只看该作者
回复 18# jun277

后面没有print动作啊


   

论坛徽章:
0
20 [报告]
发表于 2013-01-22 16:21 |只看该作者
回复 19# asdf2110

攀氀猀攀 if($0!~/^X|Y/) print $0;不是把非X,Y的行都打印出来了吗?为啥if(line==NR)$0="  (9 9) (2 0)“不是写进这一行了吗?为啥就输出不了这一行

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

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP