免费注册 查看新帖 |

Chinaunix

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

排序问题! [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-10-10 20:19 |只看该作者 |倒序浏览
实际工作中遇到一个问题。现在简化一下取开头4行说明一下问题,文件共有几千行。
7--28   1       4
10--21  2       0
4--26   1       5
7--25   3       3
我想根据第二列排序,结果输出为
7--25   3       3
10--21  2       0
4--26   1       5
7--28   1       4
第二列从大到小排列,如果第二列相同,就根据第三列从大到小,这个怎么实现?

虽然用excel可以很容易实现,但是我想用perl实现,方便后续处理。哪位高手指点一下?


顺便再问一个实际工作中经常遇到的问题,比如说 $a=my name is tonghaiyu;
现在我想得到$a中的name这个单词,有什么好的办法?

我平时都写的很复杂,
if ($a=~/(name)/)
{
       $b=$1;
}
然后用$b,这样。  有没有什么简便的方法?

[ 本帖最后由 tonghaiyu 于 2009-10-10 20:38 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2009-10-10 21:10 |只看该作者
sort -k 2 -n file

论坛徽章:
0
3 [报告]
发表于 2009-10-10 21:10 |只看该作者
如果你一定要用perl....

  1. print map {$_->[1]}
  2.     sort {$a->[0] <=> $b->[0]}
  3.     map {[(split)[1], $_]} <DATA>;

  4. __END__
  5. 7--28   1       4
  6. 10--21  2       0
  7. 4--26   1       5
  8. 7--25   3       3

复制代码

论坛徽章:
0
4 [报告]
发表于 2009-10-10 21:17 |只看该作者
顺便再问一个实际工作中经常遇到的问题,比如说 $a=my name is tonghaiyu;
现在我想得到$a中的name这个单词,有什么好的办法?

我平时都写的很复杂,
if ($a=~/(name)/)
{
       $b=$1;
}
然后用$b,这样。  有没有什么简便的方法?

最好的方法:

$b = 'name';
-_-|||||
谁知道你要什么..

方法2:

  1. $foo="my name is tonghaiyu;"
  2. my ($bar) = $foo =~ m/(name)/;

复制代码

论坛徽章:
0
5 [报告]
发表于 2009-10-10 21:58 |只看该作者

回复 #2 DQP 的帖子

这个是个好主意,一直以为dos下没有sort命令的!

论坛徽章:
0
6 [报告]
发表于 2009-10-10 22:07 |只看该作者
这个技术高了。我这个小菜鸟就不明白了,希望高手解释一下。
这里三个句子,应该是 map {$_->[1]} sort {$a->[0]  $b->[0]}  map {[(split)[1], $_]} ; 这样一整个吧。
也就是说,他要先运行 map {[(split)[1], $_]} 这里{}是map函数的,[]是表示一个表符号?
(split)[1], $_ 这个就不明白了,他要实现的目的,是把第二列和第三列放入数组,但是这个怎么实现的呢?尤其是(split)[1],这个。  

sort 函数是排序和排序方式,但是这个时候后面应该有两个数组啊?

map {$_->[1]}这个也不明白,为什么[1]?

希望高手能够帮忙解释一下,还是非常感谢DQP发表精深写法。


原帖由 DQP 于 2009-10-10 21:10 发表
如果你一定要用perl....

print map {$_->[1]}
    sort {$a->[0]  $b->[0]}
    map {[(split)[1], $_]} ;

__END__
7--28   1       4
10--21  2       0
4--26   1       5
7--25   3       3

论坛徽章:
0
7 [报告]
发表于 2009-10-11 20:57 |只看该作者
搜下创建匿名数组的引用就知道了。。。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP