用于检查文件的最后一个行号的Perl代码

时间:2014-08-22 00:56:54

标签: perl file-io

我已经编写了一个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);

'/ root / deep'目录包含两个文件。一个有90行,另一行有100行写在文件中。

我希望打印这些数字而不是单个数字,例如1..90和1..100 by $。

感谢。

4 个答案:

答案 0 :(得分:4)

你真的想使用Perl吗?

wc -l <File>

答案 1 :(得分:2)

如果您想要最后一个行号,请等待$.打印到while循环之外,以便处理该文件:

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

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

close $fh;

请务必阅读:perlfaq5 - How do I count the number of lines in a file?

答案 2 :(得分:0)

试试这个。它还会打印文件名的最后一个数字。

$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";
}

答案 3 :(得分:0)

你也可以使用oneliner

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

测试

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