免费注册 查看新帖 |

Chinaunix

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

请问下,这个sed表达式中,删除语句错误是何原因呢? [复制链接]

论坛徽章:
2
射手座
日期:2014-10-10 15:59:4715-16赛季CBA联赛之上海
日期:2016-03-03 10:27:14
11 [报告]
发表于 2012-03-09 14:06 |只看该作者
回复 10# lalala23456


    说下你的原始要求是什么,感觉那个errorlog只会保留最后一次的结果啊

论坛徽章:
0
12 [报告]
发表于 2012-03-09 14:13 |只看该作者
回复 11# yinyuemi
我有一个errlog文件,把其中不符合的errid=0的都删掉,是删这一片,9行。我先统计了errid=0的行号(在linenumber文件中),然后行号分别-7,+2(这个范围大小固定),得到这一片的范围,然后删除掉它们。将删除后的errlog文件存到newerrlog文件中。
请教下,这个代码的逻辑上有错误吗?


   

论坛徽章:
2
射手座
日期:2014-10-10 15:59:4715-16赛季CBA联赛之上海
日期:2016-03-03 10:27:14
13 [报告]
发表于 2012-03-09 14:27 |只看该作者
回复 12# lalala23456

  1.     awk 'NR==FNR&&/errid=0/{print a[NR-6]=1;next} # 读linenumber 文件获得行号,并-6,存入数组a
  2.      NR>FNR&&a[FNR]{p=-10} #读errorlog 文件,如果a[行号]为真,
  3.     {p++} #临时变量p
  4.      p>=0{print} # 如果p>=0,则打印,也就是不在那9行的内容。
  5.     ' >newerrorlog
复制代码

论坛徽章:
0
14 [报告]
发表于 2012-03-09 14:44 |只看该作者
回复 13# yinyuemi
您的意思是,我直接执行
  1. awk 'NR==FNR&&/errid=0/{print a[NR-6]=1;next}  NR>FNR&&a[FNR]{p=-10} {p++}  p>=0{print} ' > newerrorlog
复制代码
这条语句,而不用写脚本?
这条语句是如何知道,开始读的是linenumber文件,然后读的是errlog文件的呢?


   

论坛徽章:
2
射手座
日期:2014-10-10 15:59:4715-16赛季CBA联赛之上海
日期:2016-03-03 10:27:14
15 [报告]
发表于 2012-03-09 14:48 |只看该作者
回复 14# lalala23456


    awk '...' linenumber errorlog >newlog

论坛徽章:
0
16 [报告]
发表于 2012-03-09 15:09 |只看该作者
回复 15# yinyuemi
额,我是脚本新丁,感觉你的写法碉堡了。学习。
再次感谢指导。


   

论坛徽章:
0
17 [报告]
发表于 2012-03-09 15:18 |只看该作者
回复 15# yinyuemi
我执行了一下这条语句:
  1. awk 'NR==FNR&&/ErrID   : 0/{print a[NR-6]=1;next}  NR>FNR&&a[FNR]{p=-10} {p++}  p>=0{print} ' linenumber errlog20120111 > newlog
复制代码
结果并不正确。newlog文件中,有linenumber文件的内容,就是所有的行号,还有,原始的errlog20120111文件中的所有内容,并且它并未执行删除,还是5w多条的包含有行ErrID   : 0的记录在里面。

   

论坛徽章:
0
18 [报告]
发表于 2012-03-09 18:06 |只看该作者
回复 15# yinyuemi
刚才我又尝试修改了p为<=0,重新输入了:
  1. awk 'NR==FNR&&/ErrID   : 0/{print a[NR-6]=1;next}  NR>FNR&&a[FNR]{p=-10} {p++}  p<=0{print} ' errlog20120111 errlog20120111 > newlog
复制代码
结果,我把所有包含行errid=0的范围都重定向到了newlog中,可是p>=0的时候,不会删除包含errid=0的范围的行,二十将errid=0替换为1,之后,一行不多,一行不少的重定向到了newlog中去了。研究了这个awk代码,挺纳闷的现在,怎么会这样的呢?

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

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP