Код Perl для проверки последнего номера строки файла

Я написал код perl, который записывает количество строк, которые обрабатываются один за другим. Я хотел бы получить только последний номер строки файла. Код выглядит следующим образом:

#!/usr/bin/perl
using strict;
using warnings;

my $qbsid_dir = "/root/deep/";
opendir (DIR, "$qbsid_dir") or die "Cannot open the directory!\n";
while (my $file = readdir DIR){
 next if ($file =~ m/^\./);
 open(FH, "$qbsid_dir/$file") or die "Cannot open the file\n";
 while (my $line = <fh>){
 print "$.\n";
 }
 close (FH);
}
closedir (DIR);
</fh>

Каталог "/root/deep" содержит два файла. Один с 90 линиями и другими с 100 строками, написанными в файлах.

Я хочу, чтобы эти цифры печатались вместо отдельных чисел, таких как 1..90 и 1..100 на $.

Благодарю.

4 ответа

Если вы хотите номер последней строки, подождите, чтобы напечатать $. пока вне в while цикл для обработки файла:

open my $fh, '<', "$qbsid_dir/$file" or die "Can't open $file: $!";

1 while (<$fh>);
print "$file -> $.\n";

close $fh;

Обязательно прочтите: perlfaq5 - Как подсчитать количество строк в файле?


Вы действительно хотите использовать Perl?

wc -l


Попробуй это. Он также печатает последний номер имени файла.

$filedir = '/root/deep/';
opendir (dir, "$filedir");
@directory = readdir(dir);
@grep = grep{m/.*\.txt/g} @directory; #It matches the particular file format
foreach $dir(@grep){
 open(file,"$filedir/$dir");
 @line =<file>;
 $total = @line; #$total variable store the last file number from array (@line)
 print "File $dir Last line \t: $total\n";
}
</file>


Вы можете использовать oneliner тоже

perl -nE '}{say $.' filename
#or
command | perl -nE '}{say $.'

test

$ seq 10 | perl -nE '}{say $.'
10
$ seq 10 | wc -l
 10

licensed under cc by-sa 3.0 with attribution.