免费注册 查看新帖 |

Chinaunix

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

怎么样用AWK完成文本格式的转换 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-04-17 17:42 |只看该作者 |倒序浏览
怎么样用AWK完成文本格式的转换?RT
# more  summ
        719       2851    3597851          3
        719       2852    3597852          2
        719       2853    3597853          3
        720       2851    3597851          3
        720       2853    3597852          2
        720       2854    3597853          3
        721       2848    3602848          1
        721       2849    3602849          4
        721       2850    3602850          4
        721       2851    3602851          3
        721       2855    3602852          2
        721       2856    3602853          3
        721       2859    3602854          1
       .
       .
       .
       .
       .

文本巨多行,欲将上述取文本的前两列,第二列如不连续,则打印两行,第一行变化也,打印两行,转换为格式如下:
      719        719
       2851      2853   
       720        720        
       2851       2851
       720         720        
       2853       2854
       721         721      
       2848       2851
       721         721        
       2855      2859
       .
       .
       .
       .

========================================================
请问各位高人,怎么样用AWK完成文本格式的转换?

[ 本帖最后由 No.92 于 2008-4-17 20:29 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2008-04-17 20:25 |只看该作者
没看懂意思,前两列怎么得到你的格式文本

论坛徽章:
0
3 [报告]
发表于 2008-04-17 20:31 |只看该作者
不好意思,刚才没有说清楚,改了~,小弟是新手,正在学习中,所以这个关系搞明白了,但是AWK写不出来

论坛徽章:
0
4 [报告]
发表于 2008-04-17 21:37 |只看该作者
awk 'NR==1{print $1" " $1;a=$1;b1=$2;b2=$2}
NR>1 {if ($1==a) {if (b2+1==$2) {b2=$2} else {print b1" "b2;print $1" "$1;b1=$2;b2=$2}}
        else {print b1" "b2;print $1" "$1;a=$1;b1=$2;b2=$2}}
END {print b1" "b2}' file

  1. /shtest$ cat a.txt
  2. 719       2851    3597851          3
  3. 719       2852    3597852          2
  4. 719       2853    3597853          3
  5. 720       2851    3597851          3
  6. 720       2853    3597852          2
  7. 720       2854    3597853          3
  8. 721       2848    3602848          1
  9. 721       2849    3602849          4
  10. 721       2850    3602850          4
  11. 721       2851    3602851          3
  12. 721       2855    3602852          2
  13. 721       2856    3602853          3
  14. 721       2859    3602854          1
  15. /shtest$ awk -f a.awk a.txt
  16. 719 719
  17. 2851 2853
  18. 720 720
  19. 2851 2851
  20. 720 720
  21. 2853 2854
  22. 721 721
  23. 2848 2851
  24. 721 721
  25. 2855 2856
  26. 721 721
  27. 2859 2859
  28. /shtest$
复制代码

[ 本帖最后由 jinl 于 2008-4-17 21:42 编辑 ]

论坛徽章:
0
5 [报告]
发表于 2008-04-17 22:47 |只看该作者
谢谢,jinl
帮我解决了个问题,
最后一个
721 721
2859 2859
是特殊打印出来的? 不过还是能通了,谢先
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP