+ -
当前位置:首页 → 问答吧 → 一个perl排序的问题

一个perl排序的问题

时间:2010-07-31

来源:互联网

我的一个文件,内容如下:

ch1       28      name23
ch1       12      name99
ch1       15      name88
........

我想把里面的行按照 12 , 15 , 18排序,然后生成一个新的文件, 如下:


ch1       12      name99
ch1       15      name88
ch1       28      name23

.....

我该怎么做啊?

多谢!

作者: gridbird   发布时间: 2010-07-31

用sort命令最简单
sort +1n txt
  1. #!/usr/bin/perl -w
  2. use strict;
  3. open(HAND,"txt") || die "$!";
  4. my @a=<HAND>;
  5. print sort sort_a @a;

  6. sub sort_a {
  7. my ($a1,$a2,$a3)=split /\s+/,$a;
  8. my ($b1,$b2,$b3)=split /\s+/,$b;
  9. $a2<=>$b2 or $a3 cmp $b3;
  10. }
复制代码
这个是按照第2列和第3列进行排序

作者: 99超人   发布时间: 2010-07-31

将第二列作为HASH键值,排序后输出,也很方便的:
  1. #!/usr/bin/perl

  2. use strict;
  3. use warnings;
  4. open(HAND,"test.txt") || die "$!";
  5. my %hash;
  6. while (<HAND>) {
  7.          my (@rows) = split /\s+/;
  8.          $hash{$rows[1]} = $_;
  9. }
  10. foreach my $key (sort keys %hash) {
  11.         print "$hash{$key}";
  12. }
复制代码

作者: iamlimeng   发布时间: 2010-07-31