2016-06-30 44 views
1
my $path="/mnt/splash/logs/"; 
my $serv= sprintf("splash-%s-%02d%02d%02d-%s",$server,$year,$mon,$date,$hourStart); 
my $eserv= sprintf("splash-%s-%02d%02d%02d-%s",$server,$eyear,$emon,$edate,$hourEnd); 
print $serv; 
print $eserv; 
#OPEN THE SPLASH LOGS DIRECTORY AND READ THE FILES PRESENT THEN STORE IT IN ARRAY. 

my $remote_dir=sprintf("ssh %s 'ls %s'",$server,$path); 
chomp $remote_dir; 
my @list=`$remote_dir`; 

#FINDING THE ONLY SPLASH LOGS FILES FROM THE DIRECTORY AND STORED IN AN ARRAY USING PUSH METHOD. 
my @srt_list= sort @list; 
my @arlist=(); 
my @arrlog=(); 
my $i=0; 
my $filt; 
for(@srt_list) { 
    if ($_ ge $serv && $_ le $eserv) { 
     #my $filter= sprintf("$_\n"); 
     chomp $_; 

     push (@arrlog, $_); 
    } 
} 

上面是我用來從數組中檢索日誌的perl代碼。我與gele運營商使用if條件,但如果我搜索20160628-0400.log到20160629-1000.log之間的日誌文件,此代碼會將日誌從20160628-0400.log提供給20160629-0900.log,這是不檢索日誌搜索結束時間日誌20160629-1000.log。我不知道這是怎麼發生的我用le操作符,這意味着它應該選擇小於或等於登錄日誌的權限?「小於等於」操作符不工作if條件

請說明一點。我真的不想添加任何其他檢查來檢索結束時間日誌。

+0

''是,既'<='和'le'被破壞,沒有人已經注意到它,直到now.'' –

回答

3

沒有看到您的輸入數據,我將不得不猜測。

但是從你得到了什麼,我猜你比較:

20160629-100020160629-1000.log

上年底的後綴使得字母「更大」。

print "yes" if "20160629-1000" le "20160629-1000.log"; 
print "no" if "20160629-1000.log" le "20160629-1000"; 

這是因爲le是一個字符串比較,而不是數字。

簡單的解決將是剝去後綴:

for (@srt_list) { 
    my ($compare) = m/(splash.*[\d\-]+)\.log/; 
    print "Comparing $compare with $serv and $eserv\n";  
    if ($compare ge $serv && $compare le $eserv) { 
     chomp $_; 

     push (@arrlog, $_); 
    } 
}