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
sort -k1n -k2n -k3n
复制代码
作者:
huang6894
时间:
2014-09-03 09:15
回复
1#
塞图宝
#! /usr/bin/perl -w
# File Name: hh.pl
my @line;
while(<DATA>){
chomp;
push @line,[split];
}
foreach(sort { $a->[0] <=> $b->[0] or $a->[1] <=> $b->[1] or $a->[2] <=> $b->[2] } @line){
print join("\t",@$_)."\n";
}
__DATA__
1 2 3
1 2 4
2 1 3
2 2 3
1 3 4
2 4 3
2 1 2
1 1 1
复制代码
作者:
塞图宝
时间:
2014-09-05 13:54
回复
4#
huang6894
多谢了,想起来了用or!
作者:
felix0608
时间:
2014-09-06 14:20
可以更简单呢
#! /usr/bin/perl -w
use strict;
my @arr=map{$_->[0]}
sort{$a->[1] <=> $b->[1] || $a->[2] <=> $b->[2] || $a->[3] <=> $b->[3]}
map{chomp;[$_,split]}<DATA>;
print $_,"\n" for@arr;
__DATA__
1 2 3
1 2 4
2 1 3
2 2 3
1 3 4
2 4 3
2 1 2
1 1 1
复制代码
回复
5#
塞图宝
欢迎光临 Chinaunix (http://bbs.chinaunix.net/)
Powered by Discuz! X3.2