免费注册 查看新帖 |

Chinaunix

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

谁还有别具一格的思路处理这个问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-03-03 21:17 |只看该作者 |倒序浏览
20可用积分
本帖最后由 dahaoshanhe 于 2012-03-03 21:18 编辑

源文件:
  1. 63   63
  2. 74   74
  3. 82   82
  4. 95   95
  5. 96   96
  6. 99   99
  7. 97   97
  8. 98   98
  9. 100 100
  10. 114 114
  11. 123 123
  12. 135 135
复制代码
目的:在源文件中,每行有两列,两列数值相同,行与行之间有的增量为1,有的增量不为1,如第4行与第
5行增量为1,增量为1的行也可能不是紧邻连续着的,如第5行与第7行增量为1,但是不相邻连续的。想把一个几百万行的
文件中增量为1的行进行压缩,比如95到100之间增量都为1,压缩成95 100 第一列放连续递增中起始值,第二列放连续增
量结束值。
  1. 63   63
  2. 74   74
  3. 82   82
  4. 95  100
  5. 114 114
  6. 123 123
  7. 135 135
复制代码
{:3_205:}
我的 :
  1. awk 'BEGIN {
  2.                 SROW=2
  3.                 EROW=1540
  4.                 STARTR=0
  5.                 ENDR=0
  6.                 DELTA=0
  7.         }
  8.         {
  9.                 if(NR==SROW){
  10.                         STARTR=$3
  11.                         ENDR=$4
  12.                 }
  13.                 if(NR>SROW){
  14.                         DELTA=$3-ENDR
  15.                         if((DELTA==1)||(DELTA==0)) ENDR=$3
  16.                         if(DELTA>1){
  17.                                 temp=$3
  18.                                 $3=STARTR
  19.                                 $4=ENDR
  20.                                 printf "%s\n",$0
  21.                                 STARTR=temp
  22.                                 ENDR=STARTR
  23.                         }
  24.                 }
  25.                 if(NR==EROW){
  26.                         $3=STARTR
  27.                         printf "%s\n",$0
  28.                 }
  29.         }'
复制代码
谁还有别具一格的思路~~~

最佳答案

查看完整内容

回复 9# dahaoshanhe localhost:~ test$ sort -k1n

论坛徽章:
16
IT运维版块每日发帖之星
日期:2015-08-24 06:20:00综合交流区版块每日发帖之星
日期:2015-10-14 06:20:00IT运维版块每日发帖之星
日期:2015-10-25 06:20:00IT运维版块每日发帖之星
日期:2015-11-06 06:20:00IT运维版块每日发帖之星
日期:2015-12-10 06:20:00平安夜徽章
日期:2015-12-26 00:06:302016猴年福章徽章
日期:2016-02-18 15:30:34IT运维版块每日发帖之星
日期:2016-04-15 06:20:00IT运维版块每日发帖之星
日期:2016-05-21 06:20:00综合交流区版块每日发帖之星
日期:2016-08-16 06:20:002015七夕节徽章
日期:2015-08-21 11:06:17IT运维版块每日发帖之星
日期:2015-08-14 06:20:00
2 [报告]
发表于 2012-03-03 21:17 |只看该作者
回复 9# dahaoshanhe


   
localhost:~ test$ sort -k1n  <<<"63   63
74   74
82   82
95   95
96   96
99   99
97   97
98   98
100 100
114 114
123 123
"

63   63
74   74
82   82
95   95
96   96
97   97
98   98
99   99
100 100
114 114
123 123
localhost:~ test$ awk '               
{      
    t1=$1
    t2=$2
      
    if (NR==1) { min=t1; max=t2; next }
      
    if (t1<=max+1){ max=t2>max?t2:max}
    else { print min,max; min=t1; max=t2 }
}      
END{
    print min,max}' <<<"63   63
> 74   74
> 82   82
> 95   95
> 96   96
> 97   97
> 98   98
> 99   99
> 100 100
> 114 114
> 123 123"


63 63
74 74
82 82
95 100
114 114
123 123
localhost:~ test$

论坛徽章:
0
3 [报告]
发表于 2012-03-03 21:29 |只看该作者
谁有办法跳过 sort 么?

论坛徽章:
0
4 [报告]
发表于 2012-03-03 21:30 |只看该作者
awk '{if(num+1!=$1){if(num)printf num"\n"$1" ";else printf $1" "}num=$1}END{{print $1}}' file  这个是ZOOyo版主的思路

论坛徽章:
16
IT运维版块每日发帖之星
日期:2015-08-24 06:20:00综合交流区版块每日发帖之星
日期:2015-10-14 06:20:00IT运维版块每日发帖之星
日期:2015-10-25 06:20:00IT运维版块每日发帖之星
日期:2015-11-06 06:20:00IT运维版块每日发帖之星
日期:2015-12-10 06:20:00平安夜徽章
日期:2015-12-26 00:06:302016猴年福章徽章
日期:2016-02-18 15:30:34IT运维版块每日发帖之星
日期:2016-04-15 06:20:00IT运维版块每日发帖之星
日期:2016-05-21 06:20:00综合交流区版块每日发帖之星
日期:2016-08-16 06:20:002015七夕节徽章
日期:2015-08-21 11:06:17IT运维版块每日发帖之星
日期:2015-08-14 06:20:00
5 [报告]
发表于 2012-03-03 22:23 |只看该作者
30分拿来吧,就你的数据,这个可以了
  1. $ awk '
  2. {
  3.     t1=$1
  4.     t2=$2

  5.     if (NR==1) { min=t1; max=t2; next }

  6.     if (t1<=max+1){ max=t2>max?t2:max}
  7.     else { print min,max; min=t1; max=t2 }
  8. }
  9. END{
  10.     print min,max}' <<<"63   63
  11. 74   74
  12. 82   82
  13. 95   95
  14. 96   96
  15. 99   99
  16. 97   97
  17. 98   98
  18. 100 100
  19. 114 114
  20. 123 123
  21. 135 135"
  22. 63 63
  23. 74 74
  24. 82 82
  25. 95 96
  26. 99 100
  27. 114 114
  28. 123 123
  29. 135 135
复制代码

论坛徽章:
3
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:51:162015年亚洲杯之阿曼
日期:2015-04-07 20:00:59
6 [报告]
发表于 2012-03-03 22:26 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
16
IT运维版块每日发帖之星
日期:2015-08-24 06:20:00综合交流区版块每日发帖之星
日期:2015-10-14 06:20:00IT运维版块每日发帖之星
日期:2015-10-25 06:20:00IT运维版块每日发帖之星
日期:2015-11-06 06:20:00IT运维版块每日发帖之星
日期:2015-12-10 06:20:00平安夜徽章
日期:2015-12-26 00:06:302016猴年福章徽章
日期:2016-02-18 15:30:34IT运维版块每日发帖之星
日期:2016-04-15 06:20:00IT运维版块每日发帖之星
日期:2016-05-21 06:20:00综合交流区版块每日发帖之星
日期:2016-08-16 06:20:002015七夕节徽章
日期:2015-08-21 11:06:17IT运维版块每日发帖之星
日期:2015-08-14 06:20:00
7 [报告]
发表于 2012-03-03 22:26 |只看该作者
回复 1# dahaoshanhe


    ft,20分,看错了,分拿来吧。

论坛徽章:
71
15-16赛季CBA联赛之同曦
日期:2018-08-23 15:41:42辰龙
日期:2014-08-15 09:07:43狮子座
日期:2014-06-03 13:55:33亥猪
日期:2014-06-02 11:17:08巨蟹座
日期:2014-05-06 10:02:03午马
日期:2014-05-04 08:18:27亥猪
日期:2014-04-29 11:11:32技术图书徽章
日期:2014-04-24 15:51:26技术图书徽章
日期:2014-04-17 11:01:53辰龙
日期:2014-04-15 12:45:46亥猪
日期:2014-04-11 09:06:23射手座
日期:2014-04-01 15:28:10
8 [报告]
发表于 2012-03-03 22:28 |只看该作者
这个问题,对与我来说太难了!!!

论坛徽章:
0
9 [报告]
发表于 2012-03-03 22:32 |只看该作者
回复 7# expert1


    你的输出结果 对么?!  97 98 呢?

论坛徽章:
71
15-16赛季CBA联赛之同曦
日期:2018-08-23 15:41:42辰龙
日期:2014-08-15 09:07:43狮子座
日期:2014-06-03 13:55:33亥猪
日期:2014-06-02 11:17:08巨蟹座
日期:2014-05-06 10:02:03午马
日期:2014-05-04 08:18:27亥猪
日期:2014-04-29 11:11:32技术图书徽章
日期:2014-04-24 15:51:26技术图书徽章
日期:2014-04-17 11:01:53辰龙
日期:2014-04-15 12:45:46亥猪
日期:2014-04-11 09:06:23射手座
日期:2014-04-01 15:28:10
10 [报告]
发表于 2012-03-03 22:36 |只看该作者
回复 9# dahaoshanhe


    被狼叼走了
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP