Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Perl 基于第三列对数据进行排序_Perl - Fatal编程技术网

Perl 基于第三列对数据进行排序

Perl 基于第三列对数据进行排序,perl,Perl,我一直在到处寻找,但就是找不到我要找的答案 如何按上面输出的第3列进行排序 这是我的代码: AAAAAAAA 0.0.0.0 hs01.stuff.net BBBBBBBB 0.0.0.0 hs01.morestuff.net CCCCCCCC 0.0.0.0 hs01.evenmorestuff.net DDDDDDDD 0.0.0.0 hs01.stuff.net EEEEEEEE 0.0.0.0 hs01.stuff.net FFFFFFF

我一直在到处寻找,但就是找不到我要找的答案

如何按上面输出的第3列进行排序

这是我的代码:

AAAAAAAA    0.0.0.0   hs01.stuff.net
BBBBBBBB    0.0.0.0   hs01.morestuff.net
CCCCCCCC    0.0.0.0   hs01.evenmorestuff.net
DDDDDDDD    0.0.0.0   hs01.stuff.net
EEEEEEEE    0.0.0.0   hs01.stuff.net
FFFFFFFF    0.0.0.0   hs01.evenmorestuff.net
GGGGGGGG    0.0.0.0   hs01.stuff.net
HHHHHHHH    0.0.0.0   hs01.evenmorestuff.net
那么,我怎样才能按第三列对@row中的数据进行排序呢


感谢您的帮助

将从数据库提取和打印分开,并在打印前进行排序:

#!/usr/local/bin/perl
use warnings;
use DBI;
use DBD::Oracle;
use HTML::Template;
use List::MoreUtils 'uniq';

######################### Open File and Split The Data Into An Array ####################################
$input_data_file = 'C:\wamp\www\input_corrolation_file.txt';
open (DAT, $input_data_file)
      or die ("Could not open file!");

@raw_data = <DAT>;

close(DAT);
#########################################################################################################


$dbh_source2 = DBI->connect("dbi:Oracle:host=????;port=????;sid=????",'????','????');
$SEL = "SELECT DISTINCT PE_LOOPBACK_IP,PE_FQDN FROM TABLE_NAME WHERE SITE_NAME = ?";
$sth = $dbh_source2->prepare($SEL);
print '<table border=1>';
print '<tr>';
print '<th>Tower name</th>';
print '<th>SUR IP</th>';
print '<th>SUR FQDN</th>';
print '</tr>';



foreach my $data_line (@raw_data) {
        chomp $data_line;
       $sth->execute($data_line);

        my @row = $sth->fetchrow_array;
        unshift (@row, $data_line);
              #Print data into cells#
              print "<tr>";
              foreach (@row) {
                print "<td>$_</td>";
              }
              print "</tr>";
              #print "<$data_line>\t @row\n";



}

print "</table>";
END {
            $dbh_source2->disconnect if defined($dbh_source2);
}

您可以将表放入哈希表中,其中键是行,值是要排序的字段的值,然后按值对哈希表进行排序:

my @rows;
foreach my $data_line (@raw_data) {
    chomp $data_line;
    $sth->execute($data_line);

    my @row = $sth->fetchrow_array;
    unshift (@row, $data_line);
    push @rows, \@row;
}

@rows = sort { $a->[2] cmp $b->[2] } @rows;

foreach my $row (@rows) {
    print "<tr>";
    foreach (@$row) {
        print "<td>$_</td>";
    }
    print "</tr>";
}

这段代码创建一个新的排序数组,并打印排序后的行。

您的sql只得到两列;第三列来自哪里?@ysth-第三列来自unshift@row,$data\u行命令
my @arr;
my @sorted_arr;
my $key;
my %hash_sort;
my @broken_line;

push (@arr,"last\t222222\tzrf.bcd.cde");
push (@arr,"first\t999999\tabc.poi.pko");
push (@arr,"second\t444444\tjko.drt.xdf");
push (@arr,"third\t111111\tmno.lkn.tyf");

foreach $key (@arr){
  # print "$key\n";
  @broken_line = split("\t",$key);      
  $hash_sort{$key}=$broken_line[2];
}

foreach $key (sort {$hash_sort{$a} cmp $hash_sort{$b}} (keys(%hash_sort))){
  print "$key\n";
  push (@sorted_arr,$key);
}