2015-04-28 3 views
0
use Data::Dumper qw(Dumper); 
use strict; 
use warnings; 
die "Usage: $0 FILENAMEs" if not @ARGV; 
my $ni= 10; 
my $fi=10; 
my $flag =0; 
my $ni1=10; 
my $fi1 =10; 
foreach my $file (@ARGV) { 
open my $fh,"<$file.a" or die; 
while (my $line = <$fh>) { 
if ($line =~ /count/) { 
my @ores = split /:/, $line, 2; 
if($file eq "k4" and $flag ==1) 
{ 
    $ni1= $ores[1]; 
} 
else 
{ 
$flag=$flag+1; 
$ni= $ores[1]; 
print "NI--", $ni; 
} 
} 
} 
close $fh; 
$flag=0; 
open $fh,"<$file.b" or die; 
while (my $line = <$fh>) { 
if ($line =~ /count/) { 
my @ores = split /:/, $line, 2; 
if($file eq "k4" and $flag ==1) 
{ 
    $flag = $flag+1; 
    $fi1= $ores[1]; 
} 
else 
{ 
    $fi=$ores[1]; 
print "FI--", $fi; 
} 
} 
} 
    close $fh; 
    open($fh, ">>$file.log") or die "Could not open file '$file'.log $!"; 
if($file eq "k4") 
{ 
print $fh " First Instance of K4 \n-----------------------------------\n"; 
    } 
if($ni > $fi) 
{ 
    print $fh " FI: ", $fi; 
    print $fh " NI: ", $ni; 
    print $fh " NI is more than FI by: ", $ni-$fi; 
    } 
else 
{ 
    print $fh " FI: ", $fi; 
    print $fh " NI: ", $ni; 
    print $fh " FI is more than NI by: ",$fi-$ni; 
    } 
if($file eq "k4") 
{ 
print $fh "\n Second instance of K4"; 
if($ni1 > $fi1) 
{ 
    print $fh " FI: ", $fi1; 
    print $fh "\n NI: ", $ni1; 
    print $fh " NI is more than FI by: ", $ni1-$fi1; 
    } 
    else 
    { 
    print $fh " FI: ", $fi1; 
    print $fh "\n NI: ", $ni1; 
    print $fh " FI is more than NI by: ",$fi1-$ni1; 
    } 
    } 
    } 

Код, указанный выше, содержит файл file1.a и file1.b, ищет строки со счетчиком слов. Для каждой такой строки, код затем получает второе значение списка расщепленного «:» и сравнивает значения от file1.a и file1.b Ex: File1:Зависит от количества строк выходного файла:

Loops count : 12345 

Файл 2:

Roots count : 45679 

выходного файла (File1.log):

FI: 45679 
NI: 12345 
FI is more than NI by: 33334 

Но почему это происходит?

$wc -l file1.log 
2 file1.log 

(отсчет линия должна быть 3. Новые линии в конце последней строки отсутствуют)

ответ

2

Как указано, wc -l возвращает количество новой строки, то есть количество новых строк, а не количество линий.

Смежные вопросы