将以数字开头的文件复制到另一个目录

时间:2014-07-20 10:14:24

标签: perl

我已经解决了#1,但我还有2个问题。 有人可以帮助我吗?

  
      
  1. 从目录本地目录中,列出以数字(0..9)开头的所有文件以及哪个文件   扩展名为.song

  2.   
  3. 创建子目录“local dir / selected”,然后在其中复制这些文件中的每一个   为每一行(非空白)编号。

  4.   
  5. 在名为stats.txt的文件中打印出与每个文件有关的以下信息:   a)(非空白)线的数量。   b)段落数量。这里的段落是由非空行和。组成的文本块   在文件的开头,文件的结尾或者文本的开头和结尾分隔   一个空白行。   c)段落的平均大小(行数)。   d)如果,是或否,文件中的所有段落都具有相同的长度。   奖金问题:   e)检测每个文件中存在的每个押韵。   f)给出押韵线与总行数的比率。

  6.   

对于#1:

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

my $directory = '/local_dir';

opendir (DIR, $directory) or die $!;

while (my $file = readdir(DIR))
{
  # Use a regular expression to find files ending in .song.txt
  next unless ($file =~ m/\.song.txt$/);

  print "$file\n";
}

closedir(DIR);
exit 0;

1 个答案:

答案 0 :(得分:0)

以下是您如何进行第一步和第二步:

#!/usr/bin/env perl
use strict;
use warnings;
use autodie;

my $src_dir = '';
my @files = glob $src_dir . qq([0-9]*.song.txt);

my $dest_dir = 'selected';
mkdir $dest_dir;

for my $file (@files) {
    open my $fin, "<", $file;
    open my $fout, ">", "$dest_dir/$file";
    my $c = 1;
    while (<$fin>) {
        $_ = $c++ . " $_" unless /^$/;
        print $fout $_;
    }
}

您可以使用glob来查找您感兴趣的文件,而不是使用opendir,从数字[0-9]开始,到.song.txt结尾。创建输出目录后,for循环将遍历这些文件,并在目标目录中创建一个具有相同名称的新文件。 while循环遍历输入文件的每一行。如果它不是空白,它会在每行的开头添加一个数字,即行的开头不会紧跟行/^$/的结尾。然后它将该行写入新文件。

至于第三步,我认为如果你遇到困难,你可以自己去做一个新的问题。