免费注册 查看新帖 |

Chinaunix

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

请教:怎么处理这样的文本! [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-12-24 16:19 |只看该作者 |倒序浏览
文件格式如:
[oracle@asm bak]$ cat /tmp/f2
RR asfasdg3 sdfasdf : saf3 $

2009 f
2008 fasd a34%
2007 asfa  fsf
2006

------------------------
RR fsadf 3 sdf asdf; @#

2009 FASFfsf
2008 sswwwFASF

------------------------
RR fsadf 4 WWWcscdf asdf; @#

2009 FASFfsf
2007 sswwwFASF
2007 asfa  fsf0002234

-----------------------

多行的,以RR开头,"---"这个结尾为一段
现在要显示包含2007字符的段。

最后期望的结果:
###################################
RR asfasdg3 sdfasdf : saf3 $
--------------------
2007 asfa  fsf
###################################
RR fsadf 4 WWWcscdf asdf; @#
--------------------
2007 sswwwFASF
2007 asfa  fsf0002234

好象使用awk可以实现,但怎么实现。。。

论坛徽章:
0
2 [报告]
发表于 2009-12-24 16:33 |只看该作者
awk '/RR/{print $0;print "-------------------------"}/2007/{print}' urfile
RR asfasdg3 sdfasdf : saf3 $
-------------------------
2007 asfa  fsf
RR fsadf 3 sdf asdf; @#
-------------------------
RR fsadf 4 WWWcscdf asdf; @#
-------------------------
2007 sswwwFASF
2007 asfa  fsf0002234


是你想要的吗?

论坛徽章:
0
3 [报告]
发表于 2009-12-24 16:38 |只看该作者

回复 #2 yazi0127 的帖子

我还把文件搞简单点:
[oracle@asm bak]$ cat /tmp/f2
RR A1

2009
2008
2007
2006

------------------------
RR A2

2009
2008

------------------------
RR A3

2009
2007

-----------------------
[oracle@asm bak]$ awk '/RR/{print $0;print "-------------------------"}/2007/{print}' /tmp/f2
RR A1
-------------------------
2007
RR A2
-------------------------
RR A3
-------------------------
2007




应该不对,第二段不包含2007不应该输出的。 多谢,我研究一下。

论坛徽章:
0
4 [报告]
发表于 2009-12-24 16:43 |只看该作者
原帖由 yazi0127 于 2009-12-24 16:33 发表

是你想要的吗?


这样的文件:
[oracle@asm bak]$ cat /tmp/f2
RR A1

2009
2008
2007
2006

------------------------
RR A2

2009
2008

------------------------
RR A3

2009
2007 1
2007 2

-----------------------

最后得到的应该是:
RR A1
2007
-----------
RR A3
2007 1
2007 2
-----------

RR A2部分不包含就不输出!

论坛徽章:
0
5 [报告]
发表于 2009-12-24 16:48 |只看该作者
  1. [root@Mylinux tmp]# awk -F '\n' -v RS='-+' '/2007/{print "############";for (i=1;i<=NF;i++) {if ($i~/^RR/) print $i"\n-------------";if ($i~/2007/) print $i}}' file
  2. ############
  3. RR asfasdg3 sdfasdf : saf3 $
  4. -------------
  5. 2007 asfa  fsf
  6. ############
  7. RR fsadf 4 WWWcscdf asdf; @#
  8. -------------
  9. 2007 sswwwFASF
  10. 2007 asfa  fsf0002234
复制代码

论坛徽章:
0
6 [报告]
发表于 2009-12-24 17:07 |只看该作者

回复 #5 ywlscpl 的帖子

多谢,多谢!

看了半天,应该是看懂了部分。

关键是RS和NF用的好!
awk -F '\n' -v RS='-+' '/2007/   
{
  print "############";
  for (i=1;i<=NF;i++)
  {
    if ($i~/^RR/)    print $i"\n-------------";
    if ($i~/2007/)   print $i
  }
}'
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP