免费注册 查看新帖 |

Chinaunix

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

最近将一些shell脚本,替换成perl,当做练习,遇到些小问题,麻烦请教一下,排序的问题 [复制链接]

论坛徽章:
1
2015亚冠之阿尔纳斯尔
日期:2015-11-11 18:05:28
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-11-30 16:35 |只看该作者 |倒序浏览
本帖最后由 kaixin9ok 于 2012-11-30 16:43 编辑

小弟最近将一些shell脚本,替换成perl,当做练习,遇到些小问题,麻烦请教一下  {:3_196:}
  1. #!/usr/bin/perl
  2. use warnings;
  3. use strict;
  4. my $date = &date("1");
  5. my $delete_date = &date("7");
  6. my $PV_LOG_NAME="/var/log/original/access_log.$date";
  7. my $V_LOG_NAME="/var/log/v/video/access.log$date";
  8. my %num;
  9. my $id;
  10. my $pv;
  11. open FILE,"<$PV_LOG_NAME" or die "Open File Filad...$!";;
  12. while(<FILE>;){
  13.         next unless $_ =~ m/pv.gif/;
  14.         next unless $_ =~ m#http://v\.baidu\.cn/v_([\d]+)\.html#;
  15.         glob my $video_id = $1;
  16.         $num{$video_id}++;
  17. }
  18. while(($id,$pv) = each %num){
  19. print $id ."=>". $pv . "\n";
  20. }
  21. sub date(){
  22.         my $days = $_[0];
  23.         my ($day,$year,$month)=(localtime(time()-$days*86400))[3,5,4];
  24.         sprintf("%d%d%d",$year+1900,$month+1,$day);

  25. }
复制代码
结果如下:
8039=>3
11164=>2
5876=>2
10373=>10

如何排序成这样,按后面的数字进行排序,
10373=>10
8039=>3
11164=>2
5876=>2

论坛徽章:
1
2015亚冠之阿尔纳斯尔
日期:2015-11-11 18:05:28
2 [报告]
发表于 2012-11-30 17:23 |只看该作者
foreach my $key ( sort { $num{$a} <=> $num{$b} } keys %num ) {
my $value = $num{$key};
print $key ."=>". $value . "\n";
}

好吧,我上网搜了一翻,然后翻了翻小骆驼...
- -是不是我的问题太弱了.都没人关注一下初学者..

论坛徽章:
46
15-16赛季CBA联赛之四川
日期:2018-03-27 11:59:132015年亚洲杯之沙特阿拉伯
日期:2015-04-11 17:31:45天蝎座
日期:2015-03-25 16:56:49双鱼座
日期:2015-03-25 16:56:30摩羯座
日期:2015-03-25 16:56:09巳蛇
日期:2015-03-25 16:55:30卯兔
日期:2015-03-25 16:54:29子鼠
日期:2015-03-25 16:53:59申猴
日期:2015-03-25 16:53:29寅虎
日期:2015-03-25 16:52:29羊年新春福章
日期:2015-03-25 16:51:212015亚冠之布里斯班狮吼
日期:2015-07-13 10:44:56
3 [报告]
发表于 2012-11-30 17:28 |只看该作者
星期五下午到周一人很少的都出去玩了。

论坛徽章:
6
卯兔
日期:2013-11-26 14:52:02丑牛
日期:2014-02-19 18:01:25卯兔
日期:2014-05-20 20:34:06白羊座
日期:2014-05-23 13:39:232015亚冠之大阪钢巴
日期:2015-08-07 20:57:582015亚冠之大阪钢巴
日期:2015-09-02 14:09:09
4 [报告]
发表于 2012-11-30 17:37 |只看该作者
kaixin9ok 发表于 2012-11-30 17:23
foreach my $key ( sort { $num{$a}  $num{$b} } keys %num ) {
my $value = $num{$key};
print $key ."= ...

按照你的加了个试试呢
  1. foreach my $key ( sort {$num{$a} <=> $num{$b}
  2.                          or
  3.                          $a      <=> $b
  4.                          }keys %num){
  5.     my $value = $num{$key};
  6.     print "$key=>$value\n";
  7. }
复制代码

论坛徽章:
1
2015亚冠之阿尔纳斯尔
日期:2015-11-11 18:05:28
5 [报告]
发表于 2012-11-30 17:38 |只看该作者
回复 4# 只是一个红薯


嗯 这个可以的,这个我是从网上摘的.

有些不明白 ,正在啃小骆驼的高级排序章节...


   

论坛徽章:
1
2015亚冠之阿尔纳斯尔
日期:2015-11-11 18:05:28
6 [报告]
发表于 2012-11-30 17:47 |只看该作者
回复 4# 只是一个红薯


麻烦一下.能不能大概讲解一下这个是什么意思 {:3_198:}

我啃了半天,没啃明白 - -  求大师请教...


foreach my $key ( sort { $num{$a} <=> $num{$b} } keys %num ) {
my $value = $num{$key};
print $key ."=>". $value . "\n";
}
   

论坛徽章:
6
卯兔
日期:2013-11-26 14:52:02丑牛
日期:2014-02-19 18:01:25卯兔
日期:2014-05-20 20:34:06白羊座
日期:2014-05-23 13:39:232015亚冠之大阪钢巴
日期:2015-08-07 20:57:582015亚冠之大阪钢巴
日期:2015-09-02 14:09:09
7 [报告]
发表于 2012-11-30 17:55 |只看该作者
kaixin9ok 发表于 2012-11-30 17:47
回复 4# 只是一个红薯

按“键”的大小在排下序
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP