免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: 小鬼啊不

perl脚本 [复制链接]

论坛徽章:
0
发表于 2015-07-23 09:08 |显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
发表于 2015-07-23 09:23 |显示全部楼层
是个谜语呀!

论坛徽章:
0
发表于 2015-07-23 09:35 |显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
发表于 2015-07-23 10:21 |显示全部楼层
回复 3# 小鬼啊不


    这样的话逐行扫描一遍就行了:

  1. my @interval;
  2. INTERVAL:
  3.     while (<>) {
  4.         chomp;
  5.         my ($nstart, $nend) = split;
  6.         for my $i (@interval) {
  7.             my ($ostart, $oend) = @$i;
  8.             if (($ostart <= $nstart && $nstart <= $oend) ||
  9.                 ($ostart <= $nend   && $nend   <= $oend)) {
  10.                 $i->[0] = $nstart if $nstart < $ostart;
  11.                 $i->[1] = $nend if $oend < $nend;
  12.                 next INTERVAL;
  13.             }
  14.         }
  15.         push @interval, [$nstart, $nend];
  16. }
复制代码

论坛徽章:
0
发表于 2015-07-23 14:37 |显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
26
2015亚冠之胡齐斯坦钢铁
日期:2015-06-25 21:40:202015亚冠之柏斯波利斯
日期:2015-08-31 17:03:192015亚冠之柏斯波利斯
日期:2015-11-07 13:10:00程序设计版块每日发帖之星
日期:2015-11-10 06:20:00每日论坛发贴之星
日期:2015-11-10 06:20:00程序设计版块每日发帖之星
日期:2015-11-26 06:20:00程序设计版块每日发帖之星
日期:2015-12-02 06:20:00黄金圣斗士
日期:2015-12-07 17:57:4615-16赛季CBA联赛之天津
日期:2015-12-23 18:34:14程序设计版块每日发帖之星
日期:2016-01-02 06:20:00程序设计版块每日发帖之星
日期:2016-01-06 06:20:00每日论坛发贴之星
日期:2016-01-06 06:20:00
发表于 2015-07-23 14:45 |显示全部楼层
回复 4# MMMIX

大牛好,奇怪了,我这样
  1. @ARGV = 'DATA';
  2. my @interval;
  3. INTERVAL:
  4. while (<>) {
  5.     chomp;
  6.     my ( $nstart, $nend ) = split;
  7.     for my $i (@interval) {
  8.         my ( $ostart, $oend ) = @$i;
  9.         if (   ( $ostart <= $nstart && $nstart <= $oend )
  10.             || ( $ostart <= $nend && $nend <= $oend ) )
  11.         {
  12.             $i->[0] = $nstart if $nstart < $ostart;
  13.             $i->[1] = $nend   if $oend < $nend;
  14.             next INTERVAL;
  15.         }
  16.     }
  17.     push @interval, [ $nstart, $nend ];
  18. }
  19. say "@$_" for @interval;
复制代码
居然有时候能生效,有时候不能。

DATA
2         9
3         7
1         6
4         8
12       21
13       17
15       23


1        9
12     23

DATA
3         7
1         3
3         6
12       21
36       41
13       17
15       23
4         8
2         9
35       38

不能
3 8
1 9
12 23
35 41

   

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
发表于 2015-07-23 17:03 |显示全部楼层
回复 6# substr函数


    第二组数据的输出没有 3 8

论坛徽章:
1
羊年新春福章
日期:2015-04-28 20:40:58
发表于 2015-08-14 14:35 |显示全部楼层
比较笨的写一个
  1. #!/usr/bin/perl  -w
  2. use strict;
  3. my @sort = map {$_->[0]} sort {$a->[1] <=> $b->[1]} map{[$_,split]}<DATA>;
  4. my ($s,$e) = split /\s+/,shift @sort ;
  5. foreach my $i (0..$#sort){
  6.   my ($a,$b) = split /\s+/,$sort[$i];
  7.   if ($a <= $e && $b >= $e){
  8.   $e = $b;
  9. }
  10. if ($a <= $b && $b <= $e){
  11. next;}
  12. if ($a > $e){
  13. print "$s\t$e\n";
  14. $s = $a;
  15. $e = $b;
  16. }
  17. }
  18. print "$s\t$e\n";

  19. __DATA__
  20. 2         9
  21. 3         7
  22. 1         6
  23. 4         8
  24. 12       21
  25. 13       17
  26. 15       23
复制代码
回复 1# 小鬼啊不


   

论坛徽章:
7
戌狗
日期:2013-12-15 20:43:38技术图书徽章
日期:2014-03-05 01:33:12技术图书徽章
日期:2014-03-15 20:31:17未羊
日期:2014-03-25 23:48:20丑牛
日期:2014-04-07 22:37:44巳蛇
日期:2014-04-11 21:58:0915-16赛季CBA联赛之青岛
日期:2016-03-17 20:36:13
发表于 2015-08-15 03:36 |显示全部楼层
1 Ge.
  1. #!/usr/bin/perl
  2. use 5.010;

  3. my @it = sort { $a->[0] <=> $b->[0] } map [split], <DATA>;
  4. my @me = $it[0];

  5. for (@it) {
  6.     $_->[0] > $me[-1][1]
  7.       ? push @me, $_
  8.       : ( $_->[1] > $me[-1][1] and $me[-1][1] = $_->[1] );
  9. }

  10. say join "\t", @$_ for @me;

  11. __DATA__
  12. 3         7
  13. 1         3
  14. 3         6
  15. 12       21
  16. 36       41
  17. 13       17
  18. 15       23
  19. 4         8
  20. 2         9
  21. 35       38
复制代码

论坛徽章:
307
程序设计版块每周发帖之星
日期:2016-04-08 00:41:33操作系统版块每日发帖之星
日期:2015-09-02 06:20:00每日论坛发贴之星
日期:2015-09-02 06:20:00程序设计版块每日发帖之星
日期:2015-09-04 06:20:00每日论坛发贴之星
日期:2015-09-04 06:20:00每周论坛发贴之星
日期:2015-09-06 22:22:00程序设计版块每日发帖之星
日期:2015-09-09 06:20:00程序设计版块每日发帖之星
日期:2015-09-19 06:20:00程序设计版块每日发帖之星
日期:2015-09-20 06:20:00每日论坛发贴之星
日期:2015-09-20 06:20:00程序设计版块每日发帖之星
日期:2015-09-22 06:20:00程序设计版块每日发帖之星
日期:2015-09-24 06:20:00
发表于 2016-09-09 11:27 |显示全部楼层
发现对于引用的概念还是没有弄明白
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP