Chinaunix

标题: 求问AWK里如何对一组数据的打印 [打印本页]

作者: mmwants    时间: 2013-06-17 16:26
标题: 求问AWK里如何对一组数据的打印
如文档如下:
------------------------------------------------
please check it

time 20130615
xxxxddddaaa
ccccaadee
cdcaaaaadd33333333333
fffffffffffffffffffffff
gggggggggggggggggggggggggggggggggggg

time 20130616
fggfdnrrrrrrrrrrrrrrrrrr
ghhhhhhhhhhhhhhhhhhhh
jjjjjjjjjjjjjjjjjjjjjjjjjjjjj
wwwwwwwwwwwwwwwwwww
httttttww

ccccRTRqqqqq
we are closed!
-----------------------------------------
请问如何只拿出 time 20130615的那段?
应该得到的print结果为:
time 20130615
xxxxddddaaa
ccccaadee
cdcaaaaadd33333333333
fffffffffffffffffffffff
gggggggggggggggggggggggggggggggggggg


使用AWK 如何拿出这一段的内容,请高手解答,给个思路啊。
作者: dn833    时间: 2013-06-17 16:32
  1. awk 'BEGIN{RS="\n\n"}/time 20130615/' file
复制代码

作者: seesea2517    时间: 2013-06-17 16:35
回复 2# dn833


    高人。借花用用,删去四个字符
  1. [seesea@UC ~]$ awk 'BEGIN{RS="\n\n"}/time 20130615/' file
  2. time 20130615
  3. xxxxddddaaa
  4. ccccaadee
  5. cdcaaaaadd33333333333
  6. fffffffffffffffffffffff
  7. gggggggggggggggggggggggggggggggggggg
  8. [seesea@UC ~]$ awk 'BEGIN{RS=""}/time 20130615/' file   
  9. time 20130615
  10. xxxxddddaaa
  11. ccccaadee
  12. cdcaaaaadd33333333333
  13. fffffffffffffffffffffff
  14. gggggggggggggggggggggggggggggggggggg
复制代码

作者: mmwants    时间: 2013-06-17 16:51
本帖最后由 mmwants 于 2013-06-17 16:56 编辑
dn833 发表于 2013-06-17 16:32



再问下高手,如果time之间没有空行怎么办?
--------------------------
please check it
time 20130615
xxxxddddaaa
ccccaadee
cdcaaaaadd33333333333
fffffffffffffffffffffff
gggggggggggggggggggggggggggggggggggg
time 20130616
fggfdnrrrrrrrrrrrrrrrrrr
ghhhhhhhhhhhhhhhhhhhh
jjjjjjjjjjjjjjjjjjjjjjjjjjjjj
wwwwwwwwwwwwwwwwwww
httttttww

ccccRTRqqqqq
we are closed!
---------------------
作者: 心若寒江雪    时间: 2013-06-17 17:08
本帖最后由 心若寒江雪 于 2013-06-17 17:08 编辑
  1. [root@localhost opt]# cat file
  2. please check it
  3. time 20130615
  4. xxxxddddaaa
  5. ccccaadee
  6. cdcaaaaadd33333333333
  7. fffffffffffffffffffffff
  8. gggggggggggggggggggggggggggggggggggg
  9. time 20130616
  10. fggfdnrrrrrrrrrrrrrrrrrr
  11. ghhhhhhhhhhhhhhhhhhhh
  12. jjjjjjjjjjjjjjjjjjjjjjjjjjjjj
  13. wwwwwwwwwwwwwwwwwww
  14. httttttww

  15. [root@localhost opt]# awk '{if($0 == "time 20130615"){a=1}else if($1 == "time" && $2 != "20130615"){a=0}}a' file
  16. time 20130615
  17. xxxxddddaaa
  18. ccccaadee
  19. cdcaaaaadd33333333333
  20. fffffffffffffffffffffff
  21. gggggggggggggggggggggggggggggggggggg
复制代码

作者: WilliBhamlll    时间: 2013-06-17 17:17
回复 4# mmwants


    awk '/time 20130615/{p=1}/time 20130616/{p=0}p' file
time 20130615
xxxxddddaaa
ccccaadee
cdcaaaaadd33333333333
fffffffffffffffffffffff
gggggggggggggggggggggggggggggggggggg
作者: mmwants    时间: 2013-06-17 17:21
心若寒江雪 发表于 2013-06-17 17:08


这也是一种思路啊,不错哦,保留了time字符,我看了下RS分割,如果用RS分割的话,time字符就没了

思路很好,谢谢啊。
作者: mmwants    时间: 2013-06-17 17:23
心若寒江雪 发表于 2013-06-17 17:08


这也是一种思路啊,不错哦,保留了time字符,我看了下RS分割,如果用RS分割的话,time字符就没了

思路很好,谢谢啊。
作者: dn833    时间: 2013-06-17 17:31
  1. awk 'BEGIN{RS="time"}/20130615/{print RS" "$0}' file
复制代码

作者: mmwants    时间: 2013-06-17 17:41
本帖最后由 mmwants 于 2013-06-17 17:42 编辑
dn833 发表于 2013-06-17 17:31


awk 'BEGIN{RS="time"}/20130615/{print RS" "$0}' file
复制代码

time 出现了,不知为不知啊,谢谢高手。
作者: 永夜之魂    时间: 2013-06-17 22:50
本帖最后由 永夜之魂 于 2013-06-17 23:03 编辑
dn833 发表于 2013-06-17 17:31

求问,为何这里的输出结果会多显示一空白行呢?
作者: dn833    时间: 2013-06-18 09:11
回复 11# 永夜之魂


    因为默认的ORS="\n"
作者: mmwobuaini    时间: 2013-06-18 13:55
想问个问题,以下2种写法有什么区别和不同
  1. awk -v RS="\n\n" '/network/' ospf
  2. awk 'BEGIN{RS="\n\n"} /network/' ospf
复制代码





欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2