Chinaunix

标题: perl多重排序 [打印本页]

作者: 塞图宝    时间: 2014-09-03 08:31
标题: perl多重排序
如何利用sort进行多重排序呢?
比如输入文本如下
1 2 3
1 2 4
2 1 3
2 2 3
我希望先按照第一列的值得大小进行排序,如果相同,再按照第二列,以此类推。

如何写程序呢?谢谢诸位大侠!

作者: ly5066113    时间: 2014-09-03 08:55
回复 1# 塞图宝


用 shell 吧
sort file
如果要数值排序
sort -n file
作者: yestreenstars    时间: 2014-09-03 09:00
  1. sort -k1n -k2n -k3n
复制代码

作者: huang6894    时间: 2014-09-03 09:15
回复 1# 塞图宝

  1. #! /usr/bin/perl -w
  2. # File Name: hh.pl

  3. my @line;
  4. while(<DATA>){
  5.         chomp;
  6.         push @line,[split];
  7. }
  8. foreach(sort { $a->[0] <=> $b->[0] or $a->[1] <=> $b->[1] or  $a->[2] <=> $b->[2]  } @line){
  9.         print join("\t",@$_)."\n";
  10. }
  11. __DATA__
  12. 1 2 3
  13. 1 2 4
  14. 2 1 3
  15. 2 2 3
  16. 1 3 4
  17. 2 4 3
  18. 2 1 2
  19. 1 1 1
复制代码

作者: 塞图宝    时间: 2014-09-05 13:54
回复 4# huang6894


    多谢了,想起来了用or!
作者: felix0608    时间: 2014-09-06 14:20
可以更简单呢
  1. #! /usr/bin/perl -w
  2. use strict;
  3. my @arr=map{$_->[0]}
  4.                 sort{$a->[1] <=>  $b->[1] || $a->[2] <=>  $b->[2] || $a->[3] <=>  $b->[3]}
  5.                         map{chomp;[$_,split]}<DATA>;
  6. print $_,"\n" for@arr;
  7. __DATA__
  8. 1 2 3
  9. 1 2 4
  10. 2 1 3
  11. 2 2 3
  12. 1 3 4
  13. 2 4 3
  14. 2 1 2
  15. 1 1 1
复制代码
回复 5# 塞图宝


   




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2