免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: hkldd
打印 上一主题 下一主题

【求助】取一堆数字命名的文档中最大数的文档另存 [复制链接]

论坛徽章:
145
技术图书徽章
日期:2013-10-01 15:32:13戌狗
日期:2013-10-25 13:31:35金牛座
日期:2013-11-04 16:22:07子鼠
日期:2013-11-18 18:48:57白羊座
日期:2013-11-29 10:09:11狮子座
日期:2013-12-12 09:57:42白羊座
日期:2013-12-24 16:24:46辰龙
日期:2014-01-08 15:26:12技术图书徽章
日期:2014-01-17 13:24:40巳蛇
日期:2014-02-18 14:32:59未羊
日期:2014-02-20 14:12:13白羊座
日期:2014-02-26 12:06:59
11 [报告]
发表于 2016-01-18 21:36 |只看该作者
本帖最后由 jason680 于 2016-01-18 21:38 编辑

回复 1# hkldd

$ ls *.txt
122.txt  1.txt  212.txt  278.txt  2.txt

$ perl get_max.pl  *.txt
278.txt

$ cat get_max.pl
use strict;
use warnings;

die "Usage: $0 FILEs\n" if(@ARGV == 0);

my $sMax_file = shift;
foreach(@ARGV){
  no warnings 'numeric';
  $sMax_file = $_ if($sMax_file < $_);
}
# your code
print "$sMax_file\n";


   

评分

参与人数 1信誉积分 +10 收起 理由
sunzhiguolu + 10 向您学习了, 很有收获...

查看全部评分

论坛徽章:
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
12 [报告]
发表于 2016-01-18 23:24 |只看该作者
回复 11# jason680
大神您好, 有个问题向您请教, 如何让 no warnings 'numeric'; 超出作用域后恢复先前的值.
请您指点, 谢谢...

   

论坛徽章:
145
技术图书徽章
日期:2013-10-01 15:32:13戌狗
日期:2013-10-25 13:31:35金牛座
日期:2013-11-04 16:22:07子鼠
日期:2013-11-18 18:48:57白羊座
日期:2013-11-29 10:09:11狮子座
日期:2013-12-12 09:57:42白羊座
日期:2013-12-24 16:24:46辰龙
日期:2014-01-08 15:26:12技术图书徽章
日期:2014-01-17 13:24:40巳蛇
日期:2014-02-18 14:32:59未羊
日期:2014-02-20 14:12:13白羊座
日期:2014-02-26 12:06:59
13 [报告]
发表于 2016-01-18 23:34 |只看该作者
本帖最后由 jason680 于 2016-01-18 23:37 编辑

回复 12# sunzhiguolu

>> ... 如何让 no warnings 'numeric'; 超出作用域恢复先前的值...

11楼 & Perl interpreter do it well

论坛徽章:
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
14 [报告]
发表于 2016-01-19 00:43 |只看该作者
回复 13# jason680
方才我又做了次实验的确是在 no warnings 'numeric'; 超出作用域后就恢复成先前的值了, 是我马虎了.
再次感谢您的指点.

   

论坛徽章:
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
15 [报告]
发表于 2016-01-19 16:20 |只看该作者
本帖最后由 sunzhiguolu 于 2016-01-19 16:30 编辑

回复 11# jason680
大神您好, 还有一个问题向您请教, 假设目录结构如下图所示:

1.> *.txt 文件由于处于目录层级结构下 (关闭 no warnings 'numeric' 警告后), 进行文档名称比较时好像得不到正确的结果;
2.> 在 source 目录下的 *.txt 文件中有一个名为 1A3.txt 文件, 我的搜索条件该如何进行指定才能获取到文件名全部由数字组成的文件; (还是此问题不适合用 glob 操作符进行处理)
代码如下:

  1. #!/usr/bin/perl
  2. use strict;
  3. use warnings;

  4. chdir ('z:\\Demo');
  5. my ($sSearchCondition, $sFile) = ("source\\*.txt", '');
  6. {
  7.     no warnings 'numeric';
  8.     foreach (glob ($sSearchCondition)){
  9.         $sFile = $_ if ($_ > $sFile);
  10.     }
  11. }
  12. print "$sFile\n";
复制代码

论坛徽章:
145
技术图书徽章
日期:2013-10-01 15:32:13戌狗
日期:2013-10-25 13:31:35金牛座
日期:2013-11-04 16:22:07子鼠
日期:2013-11-18 18:48:57白羊座
日期:2013-11-29 10:09:11狮子座
日期:2013-12-12 09:57:42白羊座
日期:2013-12-24 16:24:46辰龙
日期:2014-01-08 15:26:12技术图书徽章
日期:2014-01-17 13:24:40巳蛇
日期:2014-02-18 14:32:59未羊
日期:2014-02-20 14:12:13白羊座
日期:2014-02-26 12:06:59
16 [报告]
发表于 2016-01-19 16:33 |只看该作者
回复 15# sunzhiguolu

$ perl -le 'print join("\t",glob("xdir/?.txt"))'
xdir/1.txt        xdir/2.txt


my ($sSearchCondition, $sFile) = ("source\\*.txt", '');
{
    no warnings 'numeric';
    foreach (glob ($sSearchCondition)){
        $sFile = $_ if ($_ > $sFile);
    }
}

solution 1:
  remove the path

solution 2:
  glob files without path

   

论坛徽章:
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
17 [报告]
发表于 2016-01-19 17:06 |只看该作者
本帖最后由 sunzhiguolu 于 2016-01-19 17:16 编辑

回复 16# jason680
由于关闭了 no warnings  'numeric' 警告, 即使我的 source 目录中包含了一个名为 1A3.txt 也找到了数字最大的文件; 问题解决了, 谢谢您.
代码如下:

  1. #!/usr/bin/perl
  2. use strict;
  3. use warnings;
  4. use File::Basename qw /basename/;

  5. chdir ('z:\\Demo');
  6. my ($sSearchCondition, $sFile) = ("source\\*.txt");
  7. my @aFiles = glob ($sSearchCondition);
  8. $sFile = shift (@aFiles);
  9. {
  10.     no warnings 'numeric';
  11.     foreach (@aFiles){
  12.         $sFile = $_ if (basename ($_) > basename ($sFile));
  13.     }
  14. }
  15. print "$sFile\n";
复制代码
如果我向目录 source 中增加了一个名为 299B.txt 文件后, 此时的结果好像由于关闭 no warnings 'numeric' 警告后把这个文件也找到了 像这种情况我该如何处理.

   

论坛徽章:
145
技术图书徽章
日期:2013-10-01 15:32:13戌狗
日期:2013-10-25 13:31:35金牛座
日期:2013-11-04 16:22:07子鼠
日期:2013-11-18 18:48:57白羊座
日期:2013-11-29 10:09:11狮子座
日期:2013-12-12 09:57:42白羊座
日期:2013-12-24 16:24:46辰龙
日期:2014-01-08 15:26:12技术图书徽章
日期:2014-01-17 13:24:40巳蛇
日期:2014-02-18 14:32:59未羊
日期:2014-02-20 14:12:13白羊座
日期:2014-02-26 12:06:59
18 [报告]
发表于 2016-01-19 17:14 |只看该作者
回复 17# sunzhiguolu


>>如果我向目录 source 中增加了一个名为 299B.txt 文件后, 此时的结果好像由于 no warnings 'numeric' 的存在而被找了出来? 像这种情况我该如何处理.
   
It's hard to know what you said ...

论坛徽章:
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
19 [报告]
发表于 2016-01-19 17:18 |只看该作者
本帖最后由 sunzhiguolu 于 2016-01-19 17:26 编辑

回复 18# jason680
大神您好, 我的描述有问题, 我还是少说话上图片吧.

  1. #!/usr/bin/perl
  2. use strict;
  3. use warnings;
  4. use File::Basename qw /basename/;

  5. chdir ('z:\\Demo');
  6. my ($sSearchCondition, $sFile) = ("source\\*.txt");
  7. my @aFiles = glob ($sSearchCondition);
  8. $sFile = shift (@aFiles);
  9. {
  10.     no warnings 'numeric';
  11.     foreach (@aFiles){
  12.         $sFile = $_ if (basename ($_) > basename ($sFile));
  13.     }
  14. }
  15. print "$sFile\n";
复制代码
输出结果:

  1. source\299B.txt
复制代码

论坛徽章:
145
技术图书徽章
日期:2013-10-01 15:32:13戌狗
日期:2013-10-25 13:31:35金牛座
日期:2013-11-04 16:22:07子鼠
日期:2013-11-18 18:48:57白羊座
日期:2013-11-29 10:09:11狮子座
日期:2013-12-12 09:57:42白羊座
日期:2013-12-24 16:24:46辰龙
日期:2014-01-08 15:26:12技术图书徽章
日期:2014-01-17 13:24:40巳蛇
日期:2014-02-18 14:32:59未羊
日期:2014-02-20 14:12:13白羊座
日期:2014-02-26 12:06:59
20 [报告]
发表于 2016-01-19 17:32 |只看该作者
本帖最后由 jason680 于 2016-01-19 17:38 编辑

回复 19# sunzhiguolu

1. you are NOT the asker 楼主
  new question
  
2. say it clearly 问题说清楚
  what do you want & where is issue?
   
3. don't push too hard 勿急燥

评分

参与人数 1信誉积分 +10 收起 理由
sunzhiguolu + 10 记下了, 非常感谢您!

查看全部评分

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP