2011-03-17 8 views
0
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 

전 검색했지만 나는 찾고있는 대답을 찾을 수 없습니다.세 번째 열을 기준으로 데이터 정렬

어떻게 위 출력의 3 열을 기준으로 정렬합니까?

#!/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); 
} 

그래서 어떻게 세 번째 열에 의해 @row에서 데이터를 정렬 할 수있을 것입니다 :

이 내 코드?

모든 도움을 주실 수 있습니다! 먼저 정렬

+0

SQL은 두 개의 열만 가져옵니다. 세 번째 출신은 어디입니까? – ysth

+0

@ysth - 세 번째 열이 unshift (@ 행, $ data_line) 명령에서 오는 것입니다 – jmg0880

+0

아, 놓친 것, 감사합니다 – ysth

답변

2
별도

데이터베이스 및 인쇄에서 페치, 그리고 당신은 인쇄 :

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>"; 
} 
+0

너무 많은 사람 감사합니다! 그것은 완벽하게 작동합니다! – jmg0880

0

당신은 키가 라인과 값은 해시로 테이블을 넣을 수있는 필드의 값입니다 당신은 정렬 기준, 다음 값으로 해시를 정렬하려면 :

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); 
} 

이 코드는 새로운 정렬 된 배열을 생성뿐만 아니라, 정렬 선을 인쇄합니다.

관련 문제